From 4635218cb07ee15244c7a6bbcf6eeeeb7cec7fcf Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 30 Jul 2020 10:01:49 +0200 Subject: [PATCH] MDEV-22521 Server crashes in traverse_role_graph_up or Assertion `user' fails in traverse_role_graph_impl --- mysql-test/suite/roles/drop_current_role.result | 5 +++++ mysql-test/suite/roles/drop_current_role.test | 9 +++++++++ sql/sql_acl.cc | 2 ++ 3 files changed, 16 insertions(+) create mode 100644 mysql-test/suite/roles/drop_current_role.result create mode 100644 mysql-test/suite/roles/drop_current_role.test diff --git a/mysql-test/suite/roles/drop_current_role.result b/mysql-test/suite/roles/drop_current_role.result new file mode 100644 index 00000000000..79525a0ff50 --- /dev/null +++ b/mysql-test/suite/roles/drop_current_role.result @@ -0,0 +1,5 @@ +create role r; +set role r; +drop role r; +revoke all on *.* from current_role; +ERROR 42000: There is no such grant defined for user 'r' on host '' diff --git a/mysql-test/suite/roles/drop_current_role.test b/mysql-test/suite/roles/drop_current_role.test new file mode 100644 index 00000000000..1485b830eed --- /dev/null +++ b/mysql-test/suite/roles/drop_current_role.test @@ -0,0 +1,9 @@ +--source include/not_embedded.inc +# +# MDEV-22521 Server crashes in traverse_role_graph_up or Assertion `user' fails in traverse_role_graph_impl +# +create role r; +set role r; +drop role r; +error ER_NONEXISTING_GRANT; +revoke all on *.* from current_role; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 7925ec58852..fee337925fc 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -4977,6 +4977,8 @@ static void propagate_role_grants(ACL_ROLE *role, enum PRIVS_TO_MERGE::what what, const char *db= 0, const char *name= 0) { + if (!role) + return; mysql_mutex_assert_owner(&acl_cache->lock); PRIVS_TO_MERGE data= { what, db, name };