summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2021-04-03 12:12:15 +0200
committerSergei Golubchik <serg@mariadb.org>2021-04-03 12:12:46 +0200
commit6fe624b5acf51383d39eb0e547a03779d41cf4a8 (patch)
tree3ae716fe0efc56f6386cfd9ae4b19de6c506e8d9
parentfb9d151934c3444e55eb3ea505e2403d082c9a85 (diff)
downloadmariadb-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.result2
-rw-r--r--mysql-test/t/userstat.test2
-rw-r--r--plugin/userstat/index_stats.cc2
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;