Commit 4a0f2563 authored by Sergei Golubchik's avatar Sergei Golubchik

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

avoid divison by zero
parent 61ed0ebe
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;
#
# 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;
...@@ -7367,6 +7367,12 @@ static bool find_mpvio_user(MPVIO_EXT *mpvio, Security_context *sctx) ...@@ -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); cs->coll->hash_sort(cs, (uchar*) sctx->user, strlen(sctx->user), &nr1, &nr2);
pthread_mutex_lock(&acl_cache->lock); 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; uint i= nr1 % acl_users.elements;
ACL_USER *acl_user_tmp= dynamic_element(&acl_users, i, ACL_USER*); ACL_USER *acl_user_tmp= dynamic_element(&acl_users, i, ACL_USER*);
mpvio->acl_user= acl_user_tmp->copy(mpvio->thd->mem_root); mpvio->acl_user= acl_user_tmp->copy(mpvio->thd->mem_root);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment