Commit b57ae8b5 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-18239 ASAN use-after-poison in process_str_arg / ... /...

MDEV-18239 ASAN use-after-poison in process_str_arg / ... / mark_unsupported_func or unexpected ER_BAD_FIELD_ERROR upon ALTER TABLE

renaming columns in a CHECK constraint during ALTER TABLE
taints the original TABLE and requires m_need_reopen=1.

In this case, though, renaming was redundant, so just don't do it.
parent db8f0dae
create table t1 (a int, b smallint) engine=innodb;
connect con1,localhost,root,,test;
alter table t1 add constraint check (b < 8);
alter table t1 modify column b int, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY
connection default;
alter table t1 add primary key (a);
drop table t1;
disconnect con1;
--source include/have_innodb.inc
#
# MDEV-18239 ASAN use-after-poison in process_str_arg / ... / mark_unsupported_func or unexpected ER_BAD_FIELD_ERROR upon ALTER TABLE
#
create table t1 (a int, b smallint) engine=innodb;
connect con1,localhost,root,,test;
alter table t1 add constraint check (b < 8);
error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON;
alter table t1 modify column b int, algorithm=inplace;
connection default;
alter table t1 add primary key (a);
drop table t1;
disconnect con1;
......@@ -8123,7 +8123,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
}
if (!drop)
{
check->expr->walk(&Item::rename_fields_processor, 1, &column_rename_param);
if (alter_info->flags & Alter_info::ALTER_RENAME_COLUMN)
{
check->expr->walk(&Item::rename_fields_processor, 1,
&column_rename_param);
table->m_needs_reopen= 1; // because new column name is on thd->mem_root
}
new_constraint_list.push_back(check, thd->mem_root);
}
}
......
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