From 79654f3fd3b39938dd7f7d3ea231a8faf74167b2 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 11 Jan 2011 23:37:15 +0000 Subject: * hash.c (hash_i): return different values for inverse hash. [ruby-core:34334] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- hash.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'hash.c') diff --git a/hash.c b/hash.c index c769e60986..c7ac394bcb 100644 --- a/hash.c +++ b/hash.c @@ -1663,9 +1663,12 @@ static int hash_i(VALUE key, VALUE val, VALUE arg) { st_index_t *hval = (st_index_t *)arg; + st_index_t hdata[2]; if (key == Qundef) return ST_CONTINUE; - *hval ^= rb_hash_end(rb_hash_uint(rb_hash_start(rb_hash(key)), rb_hash(val))); + hdata[0] = rb_hash(key); + hdata[1] = rb_hash(val); + *hval ^= st_hash(hdata, sizeof(hdata), 0); return ST_CONTINUE; } @@ -1678,9 +1681,10 @@ recursive_hash(VALUE hash, VALUE dummy, int recur) return LONG2FIX(0); hval = RHASH(hash)->ntbl->num_entries; if (recur) - hval = rb_hash_end(rb_hash_uint(rb_hash_start(rb_hash(rb_cHash)), hval)); + hval = rb_hash_uint(rb_hash_start(rb_hash(rb_cHash)), hval); else rb_hash_foreach(hash, hash_i, (VALUE)&hval); + hval = rb_hash_end(hval); return INT2FIX(hval); } -- cgit v1.2.3