Fixed ASAN failure for the test main.func_misc

Moved the checks for arguments validation of Item_name_const from the constructor
to Create_func_name_const::create_2_arg
Also reverted the fix bf1c53e9be
This commit is contained in:
Varun Gupta 2018-08-24 17:00:32 +05:30
parent 5abc79dd7a
commit 2ccae65cff
4 changed files with 22 additions and 25 deletions

View file

@ -1960,25 +1960,6 @@ Item_name_const::Item_name_const(THD *thd, Item *name_arg, Item *val):
Item_fixed_hybrid(thd), value_item(val), name_item(name_arg)
{
Item::maybe_null= TRUE;
if (!name_item->basic_const_item())
goto err;
if (value_item->basic_const_item())
return; // ok
if (value_item->type() == FUNC_ITEM)
{
Item_func *value_func= (Item_func *) value_item;
if (value_func->functype() != Item_func::COLLATE_FUNC &&
value_func->functype() != Item_func::NEG_FUNC)
goto err;
if (value_func->key_item()->basic_const_item())
return; // ok
}
err:
my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
}

View file

@ -881,7 +881,6 @@ public:
*/
String *val_str() { return val_str(&str_value); }
virtual Item_func *get_item_func() { return NULL; }
virtual Item_field *get_item_field() {return NULL;}
const MY_LOCALE *locale_from_val_str();
@ -3262,7 +3261,6 @@ public:
longlong val_int_endpoint(bool left_endp, bool *incl_endp);
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
bool get_date_result(MYSQL_TIME *ltime,ulonglong fuzzydate);
Item_field* get_item_field() {return this;}
bool is_null() { return field->is_null(); }
void update_null_value();
void update_table_bitmaps()

View file

@ -6103,7 +6103,26 @@ Create_func_name_const Create_func_name_const::s_singleton;
Item*
Create_func_name_const::create_2_arg(THD *thd, Item *arg1, Item *arg2)
{
return new (thd->mem_root) Item_name_const(thd, arg1, arg2);
if (!arg1->basic_const_item())
goto err;
if (arg2->basic_const_item())
return new (thd->mem_root) Item_name_const(thd, arg1, arg2);
if (arg2->type() == Item::FUNC_ITEM)
{
Item_func *value_func= (Item_func *) arg2;
if (value_func->functype() != Item_func::COLLATE_FUNC &&
value_func->functype() != Item_func::NEG_FUNC)
goto err;
if (!value_func->key_item()->basic_const_item())
goto err;
return new (thd->mem_root) Item_name_const(thd, arg1, arg2);
}
err:
my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
return NULL;
}

View file

@ -292,14 +292,13 @@ LEX::set_system_variable(enum enum_var_type var_type,
Item *val)
{
set_var *setvar;
Item_field *item_field;
/* No AUTOCOMMIT from a stored function or trigger. */
if (spcont && sysvar == Sys_autocommit_ptr)
sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
if (val && (item_field= val->get_item_field()) &&
item_field->table_name)
if (val && val->type() == Item::FIELD_ITEM &&
((Item_field*)val)->table_name)
{
my_error(ER_WRONG_TYPE_FOR_VAR, MYF(0), sysvar->name.str);
return TRUE;