]> granicus.if.org Git - php/commitdiff
Fix #73832 - leave the table in a safe state if the size is too big.
authorStanislav Malyshev <stas@php.net>
Tue, 3 Jan 2017 04:14:05 +0000 (20:14 -0800)
committerStanislav Malyshev <stas@php.net>
Tue, 3 Jan 2017 04:14:05 +0000 (20:14 -0800)
Zend/zend_hash.c

index 322422da155b5419a801a35a47bd2e018518ba26..8b54a3932d0ab49ce19531e5083c9c019b14aaed 100644 (file)
@@ -175,7 +175,6 @@ ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_
        GC_REFCOUNT(ht) = 1;
        GC_TYPE_INFO(ht) = IS_ARRAY;
        ht->u.flags = (persistent ? HASH_FLAG_PERSISTENT : 0) | HASH_FLAG_APPLY_PROTECTION | HASH_FLAG_STATIC_KEYS;
-       ht->nTableSize = zend_hash_check_size(nSize);
        ht->nTableMask = HT_MIN_MASK;
        HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
        ht->nNumUsed = 0;
@@ -183,6 +182,7 @@ ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_
        ht->nInternalPointer = HT_INVALID_IDX;
        ht->nNextFreeElement = 0;
        ht->pDestructor = pDestructor;
+       ht->nTableSize = zend_hash_check_size(nSize);
 }
 
 static void ZEND_FASTCALL zend_hash_packed_grow(HashTable *ht)