From e3cfb1f3ca9ab0ef4980e4e3cf983323da9a1846 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Thu, 8 Nov 2018 09:52:14 +0000 Subject: [PATCH] st.c: bin might be zero When EMPTY_OR_DELETED_BIN_P(bin) is true, it is a wrong idea to subtract ENTRY_BASE from it. Delay doing so until we are sure to be safe. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- st.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/st.c b/st.c index 77d998f9fc..5256f95b6e 100644 --- a/st.c +++ b/st.c @@ -2184,13 +2184,13 @@ st_rehash_indexed(st_table *tab) ind = hash_bin(p->hash, tab); for(;;) { st_index_t bin = get_bin(bins, size_ind, ind); - st_table_entry *q = &tab->entries[bin - ENTRY_BASE]; if (EMPTY_OR_DELETED_BIN_P(bin)) { /* ok, new room */ set_bin(bins, size_ind, ind, i + ENTRY_BASE); break; } else { + st_table_entry *q = &tab->entries[bin - ENTRY_BASE]; DO_PTR_EQUAL_CHECK(tab, q, p->hash, p->key, eq_p, rebuilt_p); if (EXPECT(rebuilt_p, 0)) return TRUE;