Commit 30d41c81 authored by Aleksey Midenkov's avatar Aleksey Midenkov

MDEV-22881 Unexpected errors, corrupt output, Valgrind / ASAN errors in...

MDEV-22881 Unexpected errors, corrupt output, Valgrind / ASAN errors in Item_ident::print or append_identifier

After this code

end_inplace:

  if (thd->locked_tables_list.reopen_tables(thd, false))
    goto err_with_mdl_after_alter;

table is not reopened (need_reopen is false) but
some_table_marked_for_reopen is reset to false.

Item_field is allocated on table lock and assigned new name on first
ALTER which is then freed at the end of the command. Second ALTER
accessess this Item_field and gets garbage value.
parent 359d5f56
......@@ -3311,5 +3311,16 @@ t2 CREATE TABLE `t2` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t2;
#
# MDEV-22881 Unexpected errors, corrupt output, Valgrind / ASAN errors in Item_ident::print or append_identifier
#
create table t1 (a int check (a >= 0));
lock tables t1 write;
alter table t1 rename column a to a;
alter table t1 rename key if exists x to xx;
Warnings:
Note 1176 Key 'x' doesn't exist in table 't1'
unlock tables;
drop table t1;
#
# End of 10.5 tests
#
......@@ -2517,6 +2517,18 @@ alter table if exists t1 rename t2;
show create table t2;
drop table t2;
--echo #
--echo # MDEV-22881 Unexpected errors, corrupt output, Valgrind / ASAN errors in Item_ident::print or append_identifier
--echo #
create table t1 (a int check (a >= 0));
lock tables t1 write;
alter table t1 rename column a to a;
alter table t1 rename key if exists x to xx;
# cleanup
unlock tables;
drop table t1;
--echo #
--echo # End of 10.5 tests
--echo #
......@@ -2592,6 +2592,7 @@ Locked_tables_list::reopen_tables(THD *thd, bool need_reopen)
/* Reset flag that some table was marked for reopen */
if (need_reopen)
some_table_marked_for_reopen= 0;
for (TABLE_LIST *table_list= m_locked_tables;
......
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