summaryrefslogtreecommitdiff
path: root/sql/sql_lex.cc
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2021-01-19 08:02:37 -0800
committerIgor Babaev <igor@askmonty.org>2021-01-19 08:04:02 -0800
commitb22285e4821b49546de9b88990bbc9c453dc14b2 (patch)
treed1967e1bedf49ac07c5192502ca690acaeb8f342 /sql/sql_lex.cc
parent3caccc7bcd7d28730d5d741480665c0b52135963 (diff)
downloadmariadb-git-b22285e4821b49546de9b88990bbc9c453dc14b2.tar.gz
MDEV-16940 Server crashes in unsafe_key_update upon attempt to update view
through 2nd execution of SP This bug caused a server crash on the second call of any stored procedure that contained an UPDATE statement over a multi-table view reporting an error message at the prepare stage. On the first call of the stored procedure after reporting an error at the preparation stage of the UPDATE statement finished without calling the function SELECT_LEX::save_prep_leaf_tables() for the SELECT used as the definition of the view. This left the SELECT_LEX structure used by the UPDATE statement in an inconsistent state for second call of the stored procedure. Approved by Oleksandr Byelkin <sanja@mariadb.com>
Diffstat (limited to 'sql/sql_lex.cc')
-rw-r--r--sql/sql_lex.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 77e6b2b6571..5059e4f656e 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -4585,6 +4585,9 @@ bool LEX::save_prep_leaf_tables()
bool st_select_lex::save_prep_leaf_tables(THD *thd)
{
+ if (prep_leaf_list_state == SAVED)
+ return FALSE;
+
List_iterator_fast<TABLE_LIST> li(leaf_tables);
TABLE_LIST *table;