diff options
author | Konstantin Osipov <kostja@sun.com> | 2010-02-02 16:58:15 +0300 |
---|---|---|
committer | Konstantin Osipov <kostja@sun.com> | 2010-02-02 16:58:15 +0300 |
commit | a6daa9ada052b7b7b09683ea6d565c92f5e15512 (patch) | |
tree | 0aec0b83266060d9cc4c9c65ee047b5fd7a83d96 /mysys/hash.c | |
parent | c6c1ddabaf2d41b362921524d617fbc772c1c9b6 (diff) | |
parent | c3eabe01fc30ee38f64b17fabfd58c6328751660 (diff) | |
download | mariadb-git-a6daa9ada052b7b7b09683ea6d565c92f5e15512.tar.gz |
Merge next-mr -> next-4284.
Fix Bug#50555 "handler commands crash server in my_hash_first()"
as a post-merge fix (the new handler tests are not passing
otherwise).
- in hash.c, don't call calc_hash if ! my_hash_inited().
- add tests and results for the test case for Bug#50555
mysys/hash.c:
Assert that the hash is initialized when it's used.
sql/set_var.cc:
Check that the hash is initalized before using it (Bug#50555)
Diffstat (limited to 'mysys/hash.c')
-rw-r--r-- | mysys/hash.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/mysys/hash.c b/mysys/hash.c index 5fa804ce7ce..39f3ad8d31e 100644 --- a/mysys/hash.c +++ b/mysys/hash.c @@ -232,6 +232,8 @@ my_hash_value_type my_calc_hash(const HASH *hash, { return calc_hash(hash, key, length ? length : hash->key_length); } + + /* Search after a record based on a key @@ -242,11 +244,17 @@ my_hash_value_type my_calc_hash(const HASH *hash, uchar* my_hash_first(const HASH *hash, const uchar *key, size_t length, HASH_SEARCH_STATE *current_record) { - return my_hash_first_from_hash_value(hash, - calc_hash(hash, key, length ? length : hash->key_length), - key, length, current_record); + uchar *res; + if (my_hash_inited(hash)) + res= my_hash_first_from_hash_value(hash, + calc_hash(hash, key, length ? length : hash->key_length), + key, length, current_record); + else + res= 0; + return res; } - + + uchar* my_hash_first_from_hash_value(const HASH *hash, my_hash_value_type hash_value, const uchar *key, |