Skip to content

Commit ded3a44

Browse files
committed
Fixed segfault while OOM in pack_to_hash
1 parent 69dbfa8 commit ded3a44

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

Zend/zend_hash.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,15 @@ ZEND_API void ZEND_FASTCALL zend_hash_real_init(HashTable *ht, zend_bool packed)
191191

192192
ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht)
193193
{
194-
void *old_data = HT_GET_DATA_ADDR(ht);
194+
void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
195195
Bucket *old_buckets = ht->arData;
196196

197197
HT_ASSERT(GC_REFCOUNT(ht) == 1);
198198
HANDLE_BLOCK_INTERRUPTIONS();
199199
ht->u.flags &= ~HASH_FLAG_PACKED;
200+
new_data = pemalloc(HT_SIZE(ht), (ht)->u.flags & HASH_FLAG_PERSISTENT);
200201
ht->nTableMask = -ht->nTableSize;
201-
HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), (ht)->u.flags & HASH_FLAG_PERSISTENT));
202+
HT_SET_DATA_ADDR(ht, new_data);
202203
memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed);
203204
pefree(old_data, (ht)->u.flags & HASH_FLAG_PERSISTENT);
204205
zend_hash_rehash(ht);

0 commit comments

Comments
 (0)