mirror of
https://github.com/MariaDB/server.git
synced 2026-05-10 00:54:30 +02:00
Bug #55568: user variable assignments crash server when used
within query The server could crash after materializing a derived table which requires a temporary table for grouping. When destroying the temporary table used to execute a query for a derived table, JOIN::destroy() did not clean up Item_fields pointing to fields in the temporary table. This led to dereferencing a dangling pointer when printing out the items tree later in the outer SELECT. The solution is an addendum to the patch for bug37362: in addition to cleaning up items in tmp_all_fields3, do the same for items in tmp_all_fields1, since now we have an example where this is necessary. mysql-test/r/join.result: Added test cases for bug#55568 and a duplicate bug #54468. mysql-test/t/join.test: Added test cases for bug#55568 and a duplicate bug #54468. sql/field.cc: Make sure field->table_name is not set to NULL in Field::make_field() to avoid assertion failure in Item_field::make_field() after cleaning up items (the assertion fired in udf.test when running the test suite with the patch applied). sql/sql_select.cc: In addition to cleaning up items in tmp_all_fields3, do the same for items in tmp_all_fields1. Introduce a new helper function to avoid code duplication. sql/sql_select.h: Introduce a new helper function to avoid code duplication in JOIN::destroy().
This commit is contained in:
parent
9ab59902a9
commit
cd4ca4b7a3
5 changed files with 114 additions and 8 deletions
|
|
@ -1535,7 +1535,7 @@ void Field::make_field(Send_field *field)
|
|||
}
|
||||
else
|
||||
field->org_table_name= field->db_name= "";
|
||||
if (orig_table)
|
||||
if (orig_table && orig_table->alias)
|
||||
{
|
||||
field->table_name= orig_table->alias;
|
||||
field->org_col_name= field_name;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue