1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-4462 mysqld gets SIGFPE when mysql.user table is empty

avoid divison by zero
This commit is contained in:
Sergei Golubchik
2013-05-08 14:32:32 +02:00
parent 61ed0ebe73
commit 4a0f2563d3
3 changed files with 32 additions and 0 deletions

View File

@ -0,0 +1,8 @@
create table t1 as select * from mysql.user;
truncate table mysql.user;
flush privileges;
connect(localhost,u1,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: NO)
insert mysql.user select * from t1;
drop table t1;
flush privileges;

View File

@ -0,0 +1,18 @@
#
# MDEV-4462 mysqld gets SIGFPE when mysql.user table is empty
#
source include/not_embedded.inc;
create table t1 as select * from mysql.user;
truncate table mysql.user;
flush privileges;
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error ER_ACCESS_DENIED_ERROR
connect (fail,localhost,u1);
insert mysql.user select * from t1;
drop table t1;
flush privileges;

View File

@ -7367,6 +7367,12 @@ static bool find_mpvio_user(MPVIO_EXT *mpvio, Security_context *sctx)
cs->coll->hash_sort(cs, (uchar*) sctx->user, strlen(sctx->user), &nr1, &nr2);
pthread_mutex_lock(&acl_cache->lock);
if (!acl_users.elements)
{
pthread_mutex_unlock(&acl_cache->lock);
login_failed_error(mpvio->thd);
return 1;
}
uint i= nr1 % acl_users.elements;
ACL_USER *acl_user_tmp= dynamic_element(&acl_users, i, ACL_USER*);
mpvio->acl_user= acl_user_tmp->copy(mpvio->thd->mem_root);