зеркало из https://github.com/github/ruby.git
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
This commit is contained in:
Родитель
e226772ab6
Коммит
e3cfb1f3ca
2
st.c
2
st.c
|
@ -2184,13 +2184,13 @@ st_rehash_indexed(st_table *tab)
|
||||||
ind = hash_bin(p->hash, tab);
|
ind = hash_bin(p->hash, tab);
|
||||||
for(;;) {
|
for(;;) {
|
||||||
st_index_t bin = get_bin(bins, size_ind, ind);
|
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)) {
|
if (EMPTY_OR_DELETED_BIN_P(bin)) {
|
||||||
/* ok, new room */
|
/* ok, new room */
|
||||||
set_bin(bins, size_ind, ind, i + ENTRY_BASE);
|
set_bin(bins, size_ind, ind, i + ENTRY_BASE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
st_table_entry *q = &tab->entries[bin - ENTRY_BASE];
|
||||||
DO_PTR_EQUAL_CHECK(tab, q, p->hash, p->key, eq_p, rebuilt_p);
|
DO_PTR_EQUAL_CHECK(tab, q, p->hash, p->key, eq_p, rebuilt_p);
|
||||||
if (EXPECT(rebuilt_p, 0))
|
if (EXPECT(rebuilt_p, 0))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче