Commit 49c8d8b2 authored by unknown's avatar unknown

MDEV-3810 fix.

  
The problem is that memory alocated by copy_andor_structure() well be freed,
but if level of SELECT_LEX it will be excluded (in case of merge derived tables and view)
then sl->where/having will not be updated here but still can be accessed (so it will be access to freed memory).

(patch by Sanja)
parent 3bd3dd54
...@@ -2447,14 +2447,24 @@ void reinit_stmt_before_use(THD *thd, LEX *lex) ...@@ -2447,14 +2447,24 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
*/ */
if (sl->prep_where) if (sl->prep_where)
{ {
sl->where= sl->prep_where->copy_andor_structure(thd); /*
We need this rollback because memory allocated in
copy_andor_structure() will be freed
*/
thd->change_item_tree((Item**)&sl->where,
sl->prep_where->copy_andor_structure(thd));
sl->where->cleanup(); sl->where->cleanup();
} }
else else
sl->where= NULL; sl->where= NULL;
if (sl->prep_having) if (sl->prep_having)
{ {
sl->having= sl->prep_having->copy_andor_structure(thd); /*
We need this rollback because memory allocated in
copy_andor_structure() will be freed
*/
thd->change_item_tree((Item**)&sl->having,
sl->prep_having->copy_andor_structure(thd));
sl->having->cleanup(); sl->having->cleanup();
} }
else else
......
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