@@ -2465,6 +2465,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
24652465 target -> nTableSize = HT_MIN_SIZE ;
24662466 HT_SET_DATA_ADDR (target , & uninitialized_bucket );
24672467 } else if (GC_FLAGS (source ) & IS_ARRAY_IMMUTABLE ) {
2468+ ZEND_ASSERT (!(HT_FLAGS (source ) & HASH_FLAG_HAS_EMPTY_IND ));
24682469 HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
24692470 target -> nTableMask = source -> nTableMask ;
24702471 target -> nNumUsed = source -> nNumUsed ;
@@ -2481,6 +2482,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
24812482 memcpy (HT_GET_DATA_ADDR (target ), HT_GET_DATA_ADDR (source ), HT_USED_SIZE (source ));
24822483 }
24832484 } else if (HT_IS_PACKED (source )) {
2485+ ZEND_ASSERT (!(HT_FLAGS (source ) & HASH_FLAG_HAS_EMPTY_IND ));
24842486 HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
24852487 target -> nTableMask = HT_MIN_MASK ;
24862488 target -> nNumUsed = source -> nNumUsed ;
@@ -2500,7 +2502,8 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
25002502 zend_array_dup_packed_elements (source , target , 1 );
25012503 }
25022504 } else {
2503- HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
2505+ /* Indirects are removed during duplication, remove HASH_FLAG_HAS_EMPTY_IND accordingly. */
2506+ HT_FLAGS (target ) = HT_FLAGS (source ) & (HASH_FLAG_MASK & ~HASH_FLAG_HAS_EMPTY_IND );
25042507 target -> nTableMask = source -> nTableMask ;
25052508 target -> nNextFreeElement = source -> nNextFreeElement ;
25062509 target -> nInternalPointer =
0 commit comments