Skip to content

Commit

Permalink
MDEV-17975 Assertion ! is_set()' or !is_set() || (m_status == DA_OK…
Browse files Browse the repository at this point in the history
…_BULK && is_bulk_op())' failed upon REVOKE under LOCK TABLE

open_grant_tables() returns -1/0/1, where -1 is an error, while 1 is not.
Don't store it's return value in bool
  • Loading branch information
vuvova committed Dec 20, 2018
1 parent dd72d7d commit 8ede9b3
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 4 deletions.
7 changes: 7 additions & 0 deletions mysql-test/r/grant5.result
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,10 @@ show grants for foo@'%';
ERROR 42000: Access denied for user 'test'@'%' to database 'mysql'
drop user test, foo;
drop role foo;
CREATE TABLE t1 (a INT);
LOCK TABLE t1 WRITE;
REVOKE EXECUTE ON PROCEDURE sp FROM u;
ERROR HY000: Table 'user' was not locked with LOCK TABLES
REVOKE PROCESS ON *.* FROM u;
ERROR HY000: Table 'user' was not locked with LOCK TABLES
DROP TABLE t1;
10 changes: 10 additions & 0 deletions mysql-test/t/grant5.test
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,13 @@ show grants for foo@'%'; # user
drop user test, foo;
drop role foo;

#
# MDEV-17975 Assertion `! is_set()' or `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed upon REVOKE under LOCK TABLE
#
CREATE TABLE t1 (a INT);
LOCK TABLE t1 WRITE;
--error ER_TABLE_NOT_LOCKED
REVOKE EXECUTE ON PROCEDURE sp FROM u;
--error ER_TABLE_NOT_LOCKED
REVOKE PROCESS ON *.* FROM u;
DROP TABLE t1;
9 changes: 5 additions & 4 deletions sql/sql_acl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -786,8 +786,7 @@ static const int Table_procs_priv= 1 << PROCS_PRIV_TABLE;
static const int Table_proxies_priv= 1 << PROXIES_PRIV_TABLE;
static const int Table_roles_mapping= 1 << ROLES_MAPPING_TABLE;

static int open_grant_tables(THD *thd, TABLE_LIST *tables,
enum thr_lock_type lock_type, int tables_to_open);
static int open_grant_tables(THD *, TABLE_LIST *, enum thr_lock_type, int);

const LEX_STRING acl_table_names[]= // matches enum_acl_tables
{
Expand Down Expand Up @@ -6030,7 +6029,8 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc,
List_iterator <LEX_USER> str_list (user_list);
LEX_USER *Str, *tmp_Str;
TABLE_LIST tables[TABLES_MAX];
bool create_new_users= 0, result;
bool create_new_users= 0;
int result;
char *db_name, *table_name;
DBUG_ENTER("mysql_routine_grant");

Expand Down Expand Up @@ -6465,7 +6465,8 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
List_iterator <LEX_USER> str_list (list);
LEX_USER *Str, *tmp_Str, *proxied_user= NULL;
char tmp_db[SAFE_NAME_LEN+1];
bool create_new_users=0, result;
bool create_new_users=0;
int result;
TABLE_LIST tables[TABLES_MAX];
DBUG_ENTER("mysql_grant");

Expand Down

0 comments on commit 8ede9b3

Please sign in to comment.