Commit 82727c62 authored by unknown's avatar unknown

Follow-up for the patch for bugs #12472/#15137 "CREATE TABLE ... SELECT ...

which explicitly or implicitly uses stored function gives 'Table not locked'
error"

Test case for these bugs crashed in --ps-protocol mode. The crash was caused
by incorrect usage of check_grant() routine from create_table_precheck()
routine. The former assumes that either number of tables to be inspected by
it is limited explicitly (i.e. is is not UINT_MAX) or table list used and
thd->lex->query_tables_own_last value correspond to each other.
create_table_precheck() was not fulfilling this condition and crash happened.
The fix simply sets number of tables to be inspected by check_grant() to 1.


sql/sql_parse.cc:
  create_table_precheck():
    At the moment when create_table_precheck() is called TABLE_LIST element
    representing table to be created does not belong to global table list
    therefore we should limit number of tables to be inspected by check_grant()
    explicitly (as in this case table list passed to this function does not
    correspond to thd->lex->query_tables_own_last value).
parent cb5d6dbf
...@@ -7227,7 +7227,7 @@ bool create_table_precheck(THD *thd, TABLE_LIST *tables, ...@@ -7227,7 +7227,7 @@ bool create_table_precheck(THD *thd, TABLE_LIST *tables,
lex->create_info.merge_list.first)) lex->create_info.merge_list.first))
goto err; goto err;
if (grant_option && want_priv != CREATE_TMP_ACL && if (grant_option && want_priv != CREATE_TMP_ACL &&
check_grant(thd, want_priv, create_table, 0, UINT_MAX, 0)) check_grant(thd, want_priv, create_table, 0, 1, 0))
goto err; goto err;
if (select_lex->item_list.elements) if (select_lex->item_list.elements)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment