@@ -2466,6 +2466,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
24662466 target -> nTableSize = HT_MIN_SIZE ;
24672467 HT_SET_DATA_ADDR (target , & uninitialized_bucket );
24682468 } else if (GC_FLAGS (source ) & IS_ARRAY_IMMUTABLE ) {
2469+ ZEND_ASSERT (!(HT_FLAGS (source ) & HASH_FLAG_HAS_EMPTY_IND ));
24692470 HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
24702471 target -> nTableMask = source -> nTableMask ;
24712472 target -> nNumUsed = source -> nNumUsed ;
@@ -2482,6 +2483,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
24822483 memcpy (HT_GET_DATA_ADDR (target ), HT_GET_DATA_ADDR (source ), HT_USED_SIZE (source ));
24832484 }
24842485 } else if (HT_IS_PACKED (source )) {
2486+ ZEND_ASSERT (!(HT_FLAGS (source ) & HASH_FLAG_HAS_EMPTY_IND ));
24852487 HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
24862488 target -> nTableMask = HT_MIN_MASK ;
24872489 target -> nNumUsed = source -> nNumUsed ;
@@ -2501,7 +2503,8 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
25012503 zend_array_dup_packed_elements (source , target , 1 );
25022504 }
25032505 } else {
2504- HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
2506+ /* Indirects are removed during duplication, remove HASH_FLAG_HAS_EMPTY_IND accordingly. */
2507+ HT_FLAGS (target ) = HT_FLAGS (source ) & (HASH_FLAG_MASK & ~HASH_FLAG_HAS_EMPTY_IND );
25052508 target -> nTableMask = source -> nTableMask ;
25062509 target -> nNextFreeElement = source -> nNextFreeElement ;
25072510 target -> nInternalPointer =
0 commit comments