diff options
| author | Igor Babaev <igor@askmonty.org> | 2018-06-29 22:46:38 -0700 |
|---|---|---|
| committer | Igor Babaev <igor@askmonty.org> | 2018-06-29 22:46:38 -0700 |
| commit | 90cb7212742e9ae3a63bd183e171c95bd12d559f (patch) | |
| tree | 7b556ac6895fcb258d62e53b58619b0bc1fa04ca /sql/sql_select.cc | |
| parent | 9d41dd2f39f5a0c840d77e5fb7fc8d1396bf1a33 (diff) | |
| download | mariadb-git-90cb7212742e9ae3a63bd183e171c95bd12d559f.tar.gz | |
MDEV-16603 Crash with set join_cache_level=4
When the definition of the index used for hash join was created
in create_hj_key_for_table() it could cause memory overwrite
due to a bug that led to an underestimation of the number of
the index component.
Diffstat (limited to 'sql/sql_select.cc')
| -rw-r--r-- | sql/sql_select.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index b79431ae2f6..700b7b37928 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7994,7 +7994,6 @@ static bool create_hj_key_for_table(JOIN *join, JOIN_TAB *join_tab, if (first_keyuse) { key_parts++; - first_keyuse= FALSE; } else { @@ -8004,7 +8003,7 @@ static bool create_hj_key_for_table(JOIN *join, JOIN_TAB *join_tab, if (curr->keypart == keyuse->keypart && !(~used_tables & curr->used_tables) && join_tab->keyuse_is_valid_for_access_in_chosen_plan(join, - keyuse) && + curr) && are_tables_local(join_tab, curr->used_tables)) break; } @@ -8012,6 +8011,7 @@ static bool create_hj_key_for_table(JOIN *join, JOIN_TAB *join_tab, key_parts++; } } + first_keyuse= FALSE; keyuse++; } while (keyuse->table == table && keyuse->is_for_hash_join()); if (!key_parts) |
