mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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.
This commit is contained in:
@ -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;
|
|||||||
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 @@ public:
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user