diff options
author | Monty <monty@mariadb.org> | 2016-12-20 13:03:45 +0200 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2017-01-11 09:18:35 +0200 |
commit | ed0bc17bee591599c988df21b8d5a264f08eb885 (patch) | |
tree | b0ecffbdd161e067a10096b3a55099adb2164e0f | |
parent | e80ad58de8bce0923b91c08d12959c42e9e213a5 (diff) | |
download | mariadb-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.c | 14 | ||||
-rw-r--r-- | sql/item_func.cc | 3 | ||||
-rw-r--r-- | sql/sql_acl.cc | 2 | ||||
-rw-r--r-- | sql/sql_handler.cc | 13 |
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, |