diff --git a/mysql-test/suite/roles/rebuild_role_grants.result b/mysql-test/suite/roles/rebuild_role_grants.result index 2817c046ae9..bc68d8ddc9f 100644 --- a/mysql-test/suite/roles/rebuild_role_grants.result +++ b/mysql-test/suite/roles/rebuild_role_grants.result @@ -56,3 +56,9 @@ Host User Role Admin_option localhost root r1 Y drop role r1; drop user u2; +create user foo@localhost; +grant create user on *.* to foo@localhost; +create role look, isp, xxx, ppp; +rename user current_user to nnnn@'%'; +drop role look, isp, xxx, ppp; +drop user nnnn@'%'; diff --git a/mysql-test/suite/roles/rebuild_role_grants.test b/mysql-test/suite/roles/rebuild_role_grants.test index 3ec3577317a..84dbdf78fb8 100644 --- a/mysql-test/suite/roles/rebuild_role_grants.test +++ b/mysql-test/suite/roles/rebuild_role_grants.test @@ -54,3 +54,16 @@ select * from mysql.roles_mapping; drop role r1; drop user u2; + +# +# MDEV-8614 Assertion `status == 0' failed in add_role_user_mapping_action on RENAME USER +# +create user foo@localhost; +grant create user on *.* to foo@localhost; +--connect (con1, localhost, foo,,) +create role look, isp, xxx, ppp; +rename user current_user to nnnn@'%'; +drop role look, isp, xxx, ppp; +connection default; +disconnect con1; +drop user nnnn@'%'; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index e2fb35254af..8316c7b801c 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -8977,8 +8977,7 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop, So we need to examine the current element once again, but we don't need to restart the search from the beginning. */ - if (idx != elements) - idx++; + idx++; break; } @@ -9010,6 +9009,7 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop, my_hash_update(roles_mappings_hash, (uchar*) role_grant_pair, (uchar*) old_key, old_key_length); + idx++; // see the comment above break; }