summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2016-12-20 13:03:45 +0200
committerMonty <monty@mariadb.org>2017-01-11 09:18:35 +0200
commited0bc17bee591599c988df21b8d5a264f08eb885 (patch)
treeb0ecffbdd161e067a10096b3a55099adb2164e0f
parente80ad58de8bce0923b91c08d12959c42e9e213a5 (diff)
downloadmariadb-git-ed0bc17bee591599c988df21b8d5a264f08eb885.tar.gz
Removed usage of my_hash_search() with uninitialized HASH.
- Not documented on intened usage - Extra checking takes time for all HASH usage
-rw-r--r--mysys/hash.c14
-rw-r--r--sql/item_func.cc3
-rw-r--r--sql/sql_acl.cc2
-rw-r--r--sql/sql_handler.cc13
4 files changed, 19 insertions, 13 deletions
diff --git a/mysys/hash.c b/mysys/hash.c
index 2b8130ee47f..1d6b3d5daaa 100644
--- a/mysys/hash.c
+++ b/mysys/hash.c
@@ -246,13 +246,13 @@ uchar* my_hash_first(const HASH *hash, const uchar *key, size_t length,
HASH_SEARCH_STATE *current_record)
{
uchar *res;
- if (my_hash_inited(hash))
- res= my_hash_first_from_hash_value(hash,
- hash->hash_function(hash->charset, key,
- length ? length : hash->key_length),
- key, length, current_record);
- else
- res= 0;
+ DBUG_ASSERT(my_hash_inited(hash));
+
+ res= my_hash_first_from_hash_value(hash,
+ hash->hash_function(hash->charset, key,
+ length ? length :
+ hash->key_length),
+ key, length, current_record);
return res;
}
diff --git a/sql/item_func.cc b/sql/item_func.cc
index c38bdba05c2..8e912fe83c8 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -4302,7 +4302,8 @@ longlong Item_func_release_lock::val_int()
User_level_lock *ull;
- if (!(ull=
+ if (!my_hash_inited(&thd->ull_hash) ||
+ !(ull=
(User_level_lock*) my_hash_search(&thd->ull_hash,
ull_key.ptr(), ull_key.length())))
{
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index ce7de2ed72b..d2840a81e7e 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -4365,6 +4365,8 @@ table_hash_search(const char *host, const char *ip, const char *db,
static GRANT_COLUMN *
column_hash_search(GRANT_TABLE *t, const char *cname, uint length)
{
+ if (!my_hash_inited(&t->hash_columns))
+ return (GRANT_COLUMN*) 0;
return (GRANT_COLUMN*) my_hash_search(&t->hash_columns,
(uchar*) cname, length);
}
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 58db104ec96..4a27244f5b9 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -458,9 +458,10 @@ bool mysql_ha_close(THD *thd, TABLE_LIST *tables)
my_error(ER_LOCK_OR_ACTIVE_TRANSACTION, MYF(0));
DBUG_RETURN(TRUE);
}
- if ((handler= (SQL_HANDLER*) my_hash_search(&thd->handler_tables_hash,
- (uchar*) tables->alias,
- strlen(tables->alias) + 1)))
+ if ((my_hash_inited(&thd->handler_tables_hash)) &&
+ (handler= (SQL_HANDLER*) my_hash_search(&thd->handler_tables_hash,
+ (uchar*) tables->alias,
+ strlen(tables->alias) + 1)))
{
mysql_ha_close_table(handler);
my_hash_delete(&thd->handler_tables_hash, (uchar*) handler);
@@ -497,8 +498,10 @@ bool mysql_ha_close(THD *thd, TABLE_LIST *tables)
SQL_HANDLER *mysql_ha_find_handler(THD *thd, const char *name)
{
SQL_HANDLER *handler;
- if ((handler= (SQL_HANDLER*) my_hash_search(&thd->handler_tables_hash,
- (uchar*) name, strlen(name) + 1)))
+ if ((my_hash_inited(&thd->handler_tables_hash)) &&
+ (handler= (SQL_HANDLER*) my_hash_search(&thd->handler_tables_hash,
+ (uchar*) name,
+ strlen(name) + 1)))
{
DBUG_PRINT("info-in-hash",("'%s'.'%s' as '%s' table: %p",
handler->db.str,