Commit 582388e6 authored by unknown's avatar unknown

Bug #30832: Assertion + crash with select name_const('test', now());

The NAME_CONST function is required to work correctly with constants only.
When executed with functions that return types other than those returned by
Item::field_type (string, int, decimal, or real), the result gets cast to
one of those types. This cannot happen for constants.
Fixed by only allowing constants as arguments to NAME_CONST.


mysql-test/r/func_misc.result:
  Bug#30832: Test result
mysql-test/t/func_misc.test:
  Bug#30832: Test case
sql/item.h:
  Bug#30832: The fix
parent 692b686d
...@@ -185,4 +185,20 @@ ERROR 21000: Operand should contain 1 column(s) ...@@ -185,4 +185,20 @@ ERROR 21000: Operand should contain 1 column(s)
drop table table_26093; drop table table_26093;
drop function func_26093_a; drop function func_26093_a;
drop function func_26093_b; drop function func_26093_b;
SELECT NAME_CONST('test', NOW());
ERROR HY000: Incorrect arguments to NAME_CONST
SELECT NAME_CONST('test', UPPER('test'));
ERROR HY000: Incorrect arguments to NAME_CONST
SELECT NAME_CONST('test', NULL);
test
NULL
SELECT NAME_CONST('test', 1);
test
1
SELECT NAME_CONST('test', 1.0);
test
1.0
SELECT NAME_CONST('test', 'test');
test
test
End of 5.0 tests End of 5.0 tests
...@@ -189,4 +189,18 @@ drop table table_26093; ...@@ -189,4 +189,18 @@ drop table table_26093;
drop function func_26093_a; drop function func_26093_a;
drop function func_26093_b; drop function func_26093_b;
#
# Bug #30832: Assertion + crash with select name_const('test',now());
#
--error ER_WRONG_ARGUMENTS
SELECT NAME_CONST('test', NOW());
--error ER_WRONG_ARGUMENTS
SELECT NAME_CONST('test', UPPER('test'));
SELECT NAME_CONST('test', NULL);
SELECT NAME_CONST('test', 1);
SELECT NAME_CONST('test', 1.0);
SELECT NAME_CONST('test', 'test');
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -1112,6 +1112,8 @@ class Item_name_const : public Item ...@@ -1112,6 +1112,8 @@ class Item_name_const : public Item
Item_name_const(Item *name_arg, Item *val): Item_name_const(Item *name_arg, Item *val):
value_item(val), name_item(name_arg) value_item(val), name_item(name_arg)
{ {
if(!value_item->basic_const_item())
my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
Item::maybe_null= TRUE; Item::maybe_null= TRUE;
} }
......
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