diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-07-06 14:42:57 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-07-06 14:42:57 +0000 |
commit | ea74da0c6c71edf8025ff67fbf445251d512acf1 (patch) | |
tree | 4d547dac3596947771af9fc8997e7b641e605b7d /st.c | |
parent | e6be6ebc7701c31e83cc25a7463bc72c59b2782d (diff) | |
download | ruby-ea74da0c6c71edf8025ff67fbf445251d512acf1.tar.gz |
st.c: re-calc hash_val before adding
* st.c (st_update): re-calculate hash_val before adding if key was
changed, otherwise cannot access the newly added element if it
has different hash value.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -843,6 +843,7 @@ st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data switch (retval) { case ST_CONTINUE: if (!existing) { + if (key != old_key) hash_val = do_hash(key, table); add_packed_direct(table, key, value, hash_val); break; } @@ -878,6 +879,7 @@ st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data switch (retval) { case ST_CONTINUE: if (!existing) { + if (key != old_key) hash_val = do_hash(key, table); add_direct(table, key, value, hash_val, hash_pos(hash_val, table->num_bins)); break; } |