]> granicus.if.org Git - php/commitdiff
Don't overwrite iterator count during real init
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 16 Apr 2019 10:19:37 +0000 (12:19 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 16 Apr 2019 10:21:20 +0000 (12:21 +0200)
Zend/zend_hash.c

index 5358f0d7d0cb3010870f65f81b2925682da085b3..e4024d9688a036d6b78b48fbed8661eaf69439b5 100644 (file)
@@ -129,7 +129,8 @@ static zend_always_inline void zend_hash_real_init_packed_ex(HashTable *ht)
                data = emalloc(HT_SIZE_EX(ht->nTableSize, HT_MIN_MASK));
        }
        HT_SET_DATA_ADDR(ht, data);
-       HT_FLAGS(ht) = HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
+       /* Don't overwrite iterator count. */
+       ht->u.v.flags = HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
        HT_HASH_RESET_PACKED(ht);
 }
 
@@ -144,7 +145,8 @@ static zend_always_inline void zend_hash_real_init_mixed_ex(HashTable *ht)
                data = emalloc(HT_SIZE_EX(HT_MIN_SIZE, HT_SIZE_TO_MASK(HT_MIN_SIZE)));
                ht->nTableMask = HT_SIZE_TO_MASK(HT_MIN_SIZE);
                HT_SET_DATA_ADDR(ht, data);
-               HT_FLAGS(ht) = HASH_FLAG_STATIC_KEYS;
+               /* Don't overwrite iterator count. */
+               ht->u.v.flags = HASH_FLAG_STATIC_KEYS;
 #ifdef __SSE2__
                do {
                        __m128i xmm0 = _mm_setzero_si128();