Loading sql/sp_head.cc +4 −3 Original line number Diff line number Diff line Loading @@ -295,7 +295,7 @@ sp_eval_func_item(THD *thd, Item **it_addr, enum enum_field_types type, /* For some functions, 's' is now pointing to an argument of the function, which might be a local variable that it to be reused. function, which might be a local variable that is to be reused. In this case, new(reuse, &rsize) below will call the destructor and 's' ends up pointing to freed memory. A somewhat ugly fix is to simply copy the string to our local one Loading @@ -304,7 +304,8 @@ sp_eval_func_item(THD *thd, Item **it_addr, enum enum_field_types type, */ if (reuse && s != &tmp && s != &it->str_value) { tmp.copy(s->c_ptr(), s->length(), it->collation.collation); if (tmp.copy((const String)(*s))) DBUG_RETURN(NULL); s= &tmp; } Loading Loading
sql/sp_head.cc +4 −3 Original line number Diff line number Diff line Loading @@ -295,7 +295,7 @@ sp_eval_func_item(THD *thd, Item **it_addr, enum enum_field_types type, /* For some functions, 's' is now pointing to an argument of the function, which might be a local variable that it to be reused. function, which might be a local variable that is to be reused. In this case, new(reuse, &rsize) below will call the destructor and 's' ends up pointing to freed memory. A somewhat ugly fix is to simply copy the string to our local one Loading @@ -304,7 +304,8 @@ sp_eval_func_item(THD *thd, Item **it_addr, enum enum_field_types type, */ if (reuse && s != &tmp && s != &it->str_value) { tmp.copy(s->c_ptr(), s->length(), it->collation.collation); if (tmp.copy((const String)(*s))) DBUG_RETURN(NULL); s= &tmp; } Loading