Commit 8998080a authored by unknown's avatar unknown

Bug #28250: Run-Time Check Failure #3 - The variable 'value' is

being used without being def

Inside method Item_func_unsigned::val_int, the variable value 
can be returned without being initialized when the CAST argument
is of type DECIMAL and has a NULL value. This gives a run-time 
error when building debug binaries using Visual C++ 2005.

Solution: Initialize value to 0


mysql-test/t/cast.test:
  bug#28250: There is no need for an extra test case, but we
  recognize that this one catches the bug.
sql/item_func.cc:
  bug#28250: initialization of value.
parent 1e33cfb3
...@@ -10,7 +10,13 @@ select cast(-5 as unsigned) -1, cast(-5 as unsigned) + 1; ...@@ -10,7 +10,13 @@ select cast(-5 as unsigned) -1, cast(-5 as unsigned) + 1;
select ~5, cast(~5 as signed); select ~5, cast(~5 as signed);
explain extended select ~5, cast(~5 as signed); explain extended select ~5, cast(~5 as signed);
select cast(5 as unsigned) -6.0; select cast(5 as unsigned) -6.0;
select cast(NULL as signed), cast(1/0 as signed); select cast(NULL as signed), cast(1/0 as signed);
#
# Bug #28250: Run-Time Check Failure #3 - The variable 'value' is being used
# without being def
#
# The following line causes Run-Time Check Failure on
# binaries built with Visual C++ 2005
select cast(NULL as unsigned), cast(1/0 as unsigned); select cast(NULL as unsigned), cast(1/0 as unsigned);
select cast("A" as binary) = "a", cast(BINARY "a" as CHAR) = "A"; select cast("A" as binary) = "a", cast(BINARY "a" as CHAR) = "A";
select cast("2001-1-1" as DATE), cast("2001-1-1" as DATETIME); select cast("2001-1-1" as DATE), cast("2001-1-1" as DATETIME);
......
...@@ -996,6 +996,8 @@ longlong Item_func_unsigned::val_int() ...@@ -996,6 +996,8 @@ longlong Item_func_unsigned::val_int()
my_decimal tmp, *dec= args[0]->val_decimal(&tmp); my_decimal tmp, *dec= args[0]->val_decimal(&tmp);
if (!(null_value= args[0]->null_value)) if (!(null_value= args[0]->null_value))
my_decimal2int(E_DEC_FATAL_ERROR, dec, 1, &value); my_decimal2int(E_DEC_FATAL_ERROR, dec, 1, &value);
else
value= 0;
return value; return value;
} }
else if (args[0]->cast_to_int_type() != STRING_RESULT || else if (args[0]->cast_to_int_type() != STRING_RESULT ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment