diff options
author | Sergei Golubchik <serg@mariadb.org> | 2021-04-03 12:12:15 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2021-04-03 12:12:46 +0200 |
commit | 6fe624b5acf51383d39eb0e547a03779d41cf4a8 (patch) | |
tree | 3ae716fe0efc56f6386cfd9ae4b19de6c506e8d9 | |
parent | fb9d151934c3444e55eb3ea505e2403d082c9a85 (diff) | |
download | mariadb-git-6fe624b5acf51383d39eb0e547a03779d41cf4a8.tar.gz |
MDEV-25242 Server crashes in check_grant upon invoking function with userstat enabled
also fix index_stats table.
followup for 5a798071199
-rw-r--r-- | mysql-test/r/userstat.result | 2 | ||||
-rw-r--r-- | mysql-test/t/userstat.test | 2 | ||||
-rw-r--r-- | plugin/userstat/index_stats.cc | 2 |
3 files changed, 5 insertions, 1 deletions
diff --git a/mysql-test/r/userstat.result b/mysql-test/r/userstat.result index 804d5451252..8aad76c3750 100644 --- a/mysql-test/r/userstat.result +++ b/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; # diff --git a/mysql-test/t/userstat.test b/mysql-test/t/userstat.test index cc7ddd58e11..6d486810db1 100644 --- a/mysql-test/t/userstat.test +++ b/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; diff --git a/plugin/userstat/index_stats.cc b/plugin/userstat/index_stats.cc index 87e6da63e38..1a7b0bbfcbd 100644 --- a/plugin/userstat/index_stats.cc +++ b/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; |