@@ -2466,6 +2466,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
2466
2466
target -> nTableSize = HT_MIN_SIZE ;
2467
2467
HT_SET_DATA_ADDR (target , & uninitialized_bucket );
2468
2468
} else if (GC_FLAGS (source ) & IS_ARRAY_IMMUTABLE ) {
2469
+ ZEND_ASSERT (!(HT_FLAGS (source ) & HASH_FLAG_HAS_EMPTY_IND ));
2469
2470
HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
2470
2471
target -> nTableMask = source -> nTableMask ;
2471
2472
target -> nNumUsed = source -> nNumUsed ;
@@ -2482,6 +2483,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
2482
2483
memcpy (HT_GET_DATA_ADDR (target ), HT_GET_DATA_ADDR (source ), HT_USED_SIZE (source ));
2483
2484
}
2484
2485
} else if (HT_IS_PACKED (source )) {
2486
+ ZEND_ASSERT (!(HT_FLAGS (source ) & HASH_FLAG_HAS_EMPTY_IND ));
2485
2487
HT_FLAGS (target ) = HT_FLAGS (source ) & HASH_FLAG_MASK ;
2486
2488
target -> nTableMask = HT_MIN_MASK ;
2487
2489
target -> nNumUsed = source -> nNumUsed ;
@@ -2501,7 +2503,8 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
2501
2503
zend_array_dup_packed_elements (source , target , 1 );
2502
2504
}
2503
2505
} 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 );
2505
2508
target -> nTableMask = source -> nTableMask ;
2506
2509
target -> nNextFreeElement = source -> nNextFreeElement ;
2507
2510
target -> nInternalPointer =
0 commit comments