From e8946265fca8220c6219b8a91b0b1556d9a4a1d4 Mon Sep 17 00:00:00 2001 From: "petr@mysql.com" <> Date: Wed, 14 Sep 2005 07:25:32 +0400 Subject: [PATCH] fix for Bug #12979 Stored procedures: crash if inout decimal parameter --- mysql-test/r/sp.result | 16 ++++++++++++++++ mysql-test/r/type_newdecimal.result | 3 +++ mysql-test/t/sp.test | 29 +++++++++++++++++++++++++++++ mysql-test/t/type_newdecimal.test | 7 +++++++ sql/item_func.cc | 2 +- 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 0559b45168b..9ad9f9175db 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -3331,4 +3331,20 @@ set @x=y; end| call bug13124()| drop procedure bug13124| +drop procedure if exists bug12979_1| +create procedure bug12979_1(inout d decimal(5)) set d = d / 2| +set @bug12979_user_var = NULL| +call bug12979_1(@bug12979_user_var)| +drop procedure bug12979_1| +drop procedure if exists bug12979_2| +create procedure bug12979_2() +begin +declare internal_var decimal(5); +set internal_var= internal_var / 2; +select internal_var; +end| +call bug12979_2()| +internal_var +NULL +drop procedure bug12979_2| drop table t1,t2; diff --git a/mysql-test/r/type_newdecimal.result b/mysql-test/r/type_newdecimal.result index f06e290a49b..d821339a229 100644 --- a/mysql-test/r/type_newdecimal.result +++ b/mysql-test/r/type_newdecimal.result @@ -1016,3 +1016,6 @@ v tdec v tdec 9 0 drop procedure wg2; +select cast(@non_existing_user_var/2 as DECIMAL); +cast(@non_existing_user_var/2 as DECIMAL) +NULL diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index a1e2bf8aa32..d44b6ac7e98 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -4177,6 +4177,35 @@ end| call bug13124()| drop procedure bug13124| +# +# Bug #12979 Stored procedures: crash if inout decimal parameter +# + +# check NULL inout parameters processing + +--disable_warnings +drop procedure if exists bug12979_1| +--enable_warnings +create procedure bug12979_1(inout d decimal(5)) set d = d / 2| +set @bug12979_user_var = NULL| +call bug12979_1(@bug12979_user_var)| +drop procedure bug12979_1| + +# check NULL local variables processing + +--disable_warnings +drop procedure if exists bug12979_2| +--enable_warnings +create procedure bug12979_2() +begin +declare internal_var decimal(5); +set internal_var= internal_var / 2; +select internal_var; +end| +call bug12979_2()| +drop procedure bug12979_2| + + # # BUG#NNNN: New bug synopsis # diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test index 55e0618a3e5..3f04aa931d2 100644 --- a/mysql-test/t/type_newdecimal.test +++ b/mysql-test/t/type_newdecimal.test @@ -1037,3 +1037,10 @@ call wg2()// delimiter ;// drop procedure wg2; + +# +# Bug #12979 Stored procedures: crash if inout decimal parameter +# (not a SP bug in fact) +# + +select cast(@non_existing_user_var/2 as DECIMAL); diff --git a/sql/item_func.cc b/sql/item_func.cc index b47d7d19fbd..518fb011e0f 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -765,7 +765,7 @@ my_decimal *Item_func_numhybrid::val_decimal(my_decimal *decimal_value) } case REAL_RESULT: { - double result= (double)int_op(); + double result= (double)real_op(); double2my_decimal(E_DEC_FATAL_ERROR, result, decimal_value); break; }