mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Bug #41437: Value stored in 'case' lacks charset, causes segfault
When substituting system constant functions with a constant result the server was not expecting that the function may return NULL. Fixed by checking for NULL and returning Item_null (in the relevant collation) if the result of the system constant function was NULL. mysql-test/r/mysql.result: Bug #41437: test case mysql-test/t/mysql.test: Bug #41437: test case. Relies on database() returning NULL if no database is selected. sql/item_strfunc.cc: Bug #41437: Check for NULL result on evaluating the system constant function and return a constant NULL item.
This commit is contained in:
parent
374f49b262
commit
ac885d5dfb
3 changed files with 13 additions and 0 deletions
|
@ -186,4 +186,6 @@ delimiter
|
|||
2
|
||||
2
|
||||
2
|
||||
@z:='1' @z=database()
|
||||
1 NULL
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -309,4 +309,9 @@ EOF
|
|||
--exec $MYSQL -c < $MYSQLTEST_VARDIR/tmp/bug38158.sql 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/bug38158.sql;
|
||||
|
||||
#
|
||||
# Bug #41437: Value stored in 'case' lacks charset, causees segfault
|
||||
#
|
||||
--exec $MYSQL -e "select @z:='1',@z=database()"
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -1696,6 +1696,12 @@ Item *Item_func_sysconst::safe_charset_converter(CHARSET_INFO *tocs)
|
|||
Item_string *conv;
|
||||
uint conv_errors;
|
||||
String tmp, cstr, *ostr= val_str(&tmp);
|
||||
if (null_value)
|
||||
{
|
||||
Item *null_item= new Item_null((char *) fully_qualified_func_name());
|
||||
null_item->collation.set (tocs);
|
||||
return null_item;
|
||||
}
|
||||
cstr.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs, &conv_errors);
|
||||
if (conv_errors ||
|
||||
!(conv= new Item_static_string_func(fully_qualified_func_name(),
|
||||
|
|
Loading…
Reference in a new issue