Browse Source

MDEV-25242 Server crashes in check_grant upon invoking function with userstat enabled

also fix index_stats table.

followup for 5a79807119
pull/1787/head
Sergei Golubchik 5 years ago
parent
commit
6fe624b5ac
  1. 2
      mysql-test/r/userstat.result
  2. 2
      mysql-test/t/userstat.test
  3. 2
      plugin/userstat/index_stats.cc

2
mysql-test/r/userstat.result

@ -240,6 +240,8 @@ create function f() returns int return (select 1 from performance_schema.threads
set global userstat= 1;
select f() from information_schema.table_statistics;
ERROR 21000: Subquery returns more than 1 row
select f() from information_schema.index_statistics;
ERROR 21000: Subquery returns more than 1 row
set global userstat= 0;
drop function f;
#

2
mysql-test/t/userstat.test

@ -121,6 +121,8 @@ create function f() returns int return (select 1 from performance_schema.threads
set global userstat= 1;
--error ER_SUBQUERY_NO_1_ROW
select f() from information_schema.table_statistics;
--error ER_SUBQUERY_NO_1_ROW
select f() from information_schema.index_statistics;
set global userstat= 0;
drop function f;

2
plugin/userstat/index_stats.cc

@ -26,7 +26,7 @@ static int index_stats_fill(THD *thd, TABLE_LIST *tables, COND *cond)
tmp_table.grant.privilege= 0;
if (check_access(thd, SELECT_ACL, tmp_table.db,
&tmp_table.grant.privilege, NULL, 0, 1) ||
check_grant(thd, SELECT_ACL, &tmp_table, 1, UINT_MAX, 1))
check_grant(thd, SELECT_ACL, &tmp_table, 1, 1, 1))
continue;
index_name= strend(tmp_table.table_name)+1;

Loading…
Cancel
Save