Skip to content

Commit 9739949

Browse files
committed
Fix the nTableSize tracking
1 parent 96f495d commit 9739949

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

Zend/zend_hash.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,12 +342,15 @@ ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht)
342342
void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
343343
Bucket *old_buckets = ht->arData;
344344
uint32_t nSize = ht->nTableSize;
345-
uint32_t nNewSize = nSize >= HT_MIN_SIZE_UNPACKED ? nSize : HT_MIN_SIZE_UNPACKED;
345+
if (nSize < HT_MIN_SIZE_UNPACKED) {
346+
nSize = HT_MIN_SIZE_UNPACKED;
347+
ht->nTableSize = HT_MIN_SIZE_UNPACKED;
348+
}
346349

347350
HT_ASSERT_RC1(ht);
348351
HT_FLAGS(ht) &= ~HASH_FLAG_PACKED;
349-
new_data = pemalloc(HT_SIZE_EX(nNewSize, HT_SIZE_TO_MASK(nNewSize)), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
350-
ht->nTableMask = HT_SIZE_TO_MASK(nNewSize);
352+
new_data = pemalloc(HT_SIZE_EX(nSize, HT_SIZE_TO_MASK(nSize)), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
353+
ht->nTableMask = HT_SIZE_TO_MASK(nSize);
351354
HT_SET_DATA_ADDR(ht, new_data);
352355
memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed);
353356
pefree(old_data, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);

0 commit comments

Comments
 (0)