diff options
author | Sachin <sachin.setiya@mariadb.com> | 2019-06-19 10:35:39 +0530 |
---|---|---|
committer | Sachin <sachin.setiya@mariadb.com> | 2019-06-19 10:35:39 +0530 |
commit | 181fccada28a38b4efe8e7d9840a329bfcb5d72c (patch) | |
tree | 5969c404d415f8be1485bba2b587e50dec6ba1fc /sql/sql_table.cc | |
parent | efbfcc8b73d9fd8bafd86ab387e0c1edd39e208b (diff) | |
download | mariadb-git-bb-10.4-19049.tar.gz |
MDEV-19049 Server crashes in check_duplicate_long_entry_key, ASAN stack-buffer-overflow in Field_blob::get_key_imagebb-10.4-19049
Long Unique keys should always be last unique key.
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r-- | sql/sql_table.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc index f2be573d984..89f5c4b9d7f 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2773,6 +2773,7 @@ bool quick_rm_table(THD *thd, handlerton *base, const LEX_CSTRING *db, - UNIQUE keys where all column are NOT NULL - UNIQUE keys that don't contain partial segments - Other UNIQUE keys + - LONG UNIQUE keys - Normal keys - Fulltext keys @@ -2796,6 +2797,14 @@ static int sort_keys(KEY *a, KEY *b) { if (!(b_flags & HA_NOSAME)) return -1; + /* + Long Unique keys should always be last unique key. + Before this patch they used to change order wrt to partial keys (MDEV-19049) + */ + if (a->algorithm == HA_KEY_ALG_LONG_HASH) + return 1; + if (b->algorithm == HA_KEY_ALG_LONG_HASH) + return -1; if ((a_flags ^ b_flags) & HA_NULL_PART_KEY) { /* Sort NOT NULL keys before other keys */ |