Commit e679dfca authored by Sergei Golubchik's avatar Sergei Golubchik

followup fixes for MySQL Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ |...

followup fixes for MySQL Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN
parent 35313020
...@@ -1675,4 +1675,8 @@ length(CAST(b AS CHAR)) ...@@ -1675,4 +1675,8 @@ length(CAST(b AS CHAR))
DROP TABLE ubig; DROP TABLE ubig;
select 1 from information_schema.tables where table_schema=repeat('a', 2000); select 1 from information_schema.tables where table_schema=repeat('a', 2000);
1 1
grant usage on *.* to mysqltest_1@localhost;
select 1 from information_schema.tables where table_schema=repeat('a', 2000);
1
drop user mysqltest_1@localhost;
End of 5.1 tests. End of 5.1 tests.
...@@ -1442,6 +1442,13 @@ DROP TABLE ubig; ...@@ -1442,6 +1442,13 @@ DROP TABLE ubig;
# Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN # Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN
# #
select 1 from information_schema.tables where table_schema=repeat('a', 2000); select 1 from information_schema.tables where table_schema=repeat('a', 2000);
grant usage on *.* to mysqltest_1@localhost;
connect (con1, localhost, mysqltest_1,,);
connection con1;
select 1 from information_schema.tables where table_schema=repeat('a', 2000);
connection default;
disconnect con1;
drop user mysqltest_1@localhost;
--echo End of 5.1 tests. --echo End of 5.1 tests.
......
...@@ -1353,14 +1353,20 @@ ulong acl_get(const char *host, const char *ip, ...@@ -1353,14 +1353,20 @@ ulong acl_get(const char *host, const char *ip,
acl_entry *entry; acl_entry *entry;
DBUG_ENTER("acl_get"); DBUG_ENTER("acl_get");
VOID(pthread_mutex_lock(&acl_cache->lock)); tmp_db= strmov(strmov(key, ip ? ip : "") + 1, user) + 1;
end=strmov((tmp_db=strmov(strmov(key, ip ? ip : "")+1,user)+1),db); end= strnmov(tmp_db, db, key + sizeof(key) - tmp_db);
if (end >= key + sizeof(key)) // db name was truncated
DBUG_RETURN(0); // no privileges for an invalid db name
if (lower_case_table_names) if (lower_case_table_names)
{ {
my_casedn_str(files_charset_info, tmp_db); my_casedn_str(files_charset_info, tmp_db);
db=tmp_db; db=tmp_db;
} }
key_length= (size_t) (end-key); key_length= (size_t) (end-key);
VOID(pthread_mutex_lock(&acl_cache->lock));
if (!db_is_pattern && (entry=(acl_entry*) acl_cache->search((uchar*) key, if (!db_is_pattern && (entry=(acl_entry*) acl_cache->search((uchar*) key,
key_length))) key_length)))
{ {
...@@ -4331,11 +4337,17 @@ static bool check_grant_db_routine(THD *thd, const char *db, HASH *hash) ...@@ -4331,11 +4337,17 @@ static bool check_grant_db_routine(THD *thd, const char *db, HASH *hash)
bool check_grant_db(THD *thd,const char *db) bool check_grant_db(THD *thd,const char *db)
{ {
Security_context *sctx= thd->security_ctx; Security_context *sctx= thd->security_ctx;
char helping [SAFE_NAME_LEN + USERNAME_LENGTH+2]; char helping [SAFE_NAME_LEN + USERNAME_LENGTH+2], *end;
uint len; uint len;
bool error= TRUE; bool error= TRUE;
len= (uint) (strmov(strmov(helping, sctx->priv_user) + 1, db) - helping) + 1; end= strmov(helping, sctx->priv_user) + 1;
end= strnmov(end, db, helping + sizeof(helping) - end);
if (end >= helping + sizeof(helping)) // db name was truncated
return 1; // no privileges for an invalid db name
len= (uint) (end - helping) + 1;
rw_rdlock(&LOCK_grant); rw_rdlock(&LOCK_grant);
......
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