Skip to content

Commit b163b8f

Browse files
committed
MDEV-28773 SIGSEGV in TABLE::use_all_columns, replace_roles_mapping_table
as elsewhere, it a priv table doesn't exist - skip it only update in-memory structures
1 parent e1f15d5 commit b163b8f

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

mysql-test/main/grant_repair.result

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,11 @@ grant proxy on grant_plug to grant_plug_dest;
8080
ERROR HY000: Cannot load from mysql.proxies_priv. The table is probably corrupted
8181
drop table mysql.proxies_priv;
8282
rename table mysql.proxies_priv_bak to mysql.proxies_priv;
83+
#
84+
# MDEV-28773 SIGSEGV in TABLE::use_all_columns, replace_roles_mapping_table
85+
#
86+
rename table mysql.roles_mapping to mysql.roles_mapping_bak;
87+
create role r1;
88+
drop role r1;
89+
rename table mysql.roles_mapping_bak to mysql.roles_mapping;
8390
# End of 10.11 tests

mysql-test/main/grant_repair.test

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,12 @@ grant proxy on grant_plug to grant_plug_dest;
9696
drop table mysql.proxies_priv;
9797
rename table mysql.proxies_priv_bak to mysql.proxies_priv;
9898

99+
--echo #
100+
--echo # MDEV-28773 SIGSEGV in TABLE::use_all_columns, replace_roles_mapping_table
101+
--echo #
102+
rename table mysql.roles_mapping to mysql.roles_mapping_bak;
103+
create role r1;
104+
drop role r1;
105+
rename table mysql.roles_mapping_bak to mysql.roles_mapping;
106+
99107
--echo # End of 10.11 tests

sql/sql_acl.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11261,11 +11261,11 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list, bool handle_as_role)
1126111261

1126211262
/* TODO(cvicentiu) refactor replace_roles_mapping_table to use
1126311263
Roles_mapping_table instead of TABLE directly. */
11264-
if (replace_roles_mapping_table(tables.roles_mapping_table().table(),
11264+
if (tables.roles_mapping_table().table_exists() &&
11265+
replace_roles_mapping_table(tables.roles_mapping_table().table(),
1126511266
&thd->lex->definer->user,
1126611267
&thd->lex->definer->host,
11267-
&user_name->user, true,
11268-
NULL, false))
11268+
&user_name->user, true, NULL, false))
1126911269
{
1127011270
append_user(thd, &wrong_users, user_name);
1127111271
if (grantee)

0 commit comments

Comments
 (0)