1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

MDEV-18809 Server crash in fields_in_hash_keyinfo or Assertion `key_info->key_part->field->flags & (1<< 30)' failed in setup_keyinfo_hash

Move calling setup_keyinfo_hash until all continue is exhausted.
And also call re_setup_keyinfo_hash for goto err.
This commit is contained in:
sachinsetia1001@gmail.com
2019-03-15 14:27:29 +05:30
parent ecf07300a2
commit 2e34a031f8
3 changed files with 43 additions and 5 deletions

View File

@ -8303,11 +8303,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
bool long_hash_key= false;
if (key_info->flags & HA_INVISIBLE_KEY)
continue;
if (key_info->algorithm == HA_KEY_ALG_LONG_HASH)
{
setup_keyinfo_hash(key_info);
long_hash_key= true;
}
const char *key_name= key_info->name.str;
Alter_drop *drop;
drop_it.rewind();
@ -8338,6 +8333,11 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
continue;
}
if (key_info->algorithm == HA_KEY_ALG_LONG_HASH)
{
setup_keyinfo_hash(key_info);
long_hash_key= true;
}
const char *dropped_key_part= NULL;
KEY_PART_INFO *key_part= key_info->key_part;
key_parts.empty();
@ -8462,6 +8462,11 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
if (dropped_key_part)
{
my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), dropped_key_part);
if (long_hash_key)
{
key_info->algorithm= HA_KEY_ALG_LONG_HASH;
re_setup_keyinfo_hash(key_info);
}
goto err;
}
}