1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-20 10:24:14 +03:00

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.
This commit is contained in:
Sergei Golubchik
2019-02-03 19:56:41 +01:00
parent db8f0daeb4
commit b57ae8b58c
3 changed files with 29 additions and 1 deletions

View File

@ -0,0 +1,9 @@
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;

View File

@ -0,0 +1,14 @@
--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;

View File

@ -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);
}
}