Skip to content

Commit c2c2021

Browse files
pmmaganikic
authored andcommitted
Use HT_MIN_SIZE when duplicating an empty array
1 parent a515f60 commit c2c2021

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

Zend/zend_hash.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1989,7 +1989,6 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
19891989
GC_SET_REFCOUNT(target, 1);
19901990
GC_TYPE_INFO(target) = IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT);
19911991

1992-
target->nTableSize = source->nTableSize;
19931992
target->pDestructor = ZVAL_PTR_DTOR;
19941993

19951994
if (source->nNumOfElements == 0) {
@@ -1999,13 +1998,15 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
19991998
target->nNumOfElements = 0;
20001999
target->nNextFreeElement = 0;
20012000
target->nInternalPointer = 0;
2001+
target->nTableSize = HT_MIN_SIZE;
20022002
HT_SET_DATA_ADDR(target, &uninitialized_bucket);
20032003
} else if (GC_FLAGS(source) & IS_ARRAY_IMMUTABLE) {
20042004
HT_FLAGS(target) = HT_FLAGS(source);
20052005
target->nTableMask = source->nTableMask;
20062006
target->nNumUsed = source->nNumUsed;
20072007
target->nNumOfElements = source->nNumOfElements;
20082008
target->nNextFreeElement = source->nNextFreeElement;
2009+
target->nTableSize = source->nTableSize;
20092010
HT_SET_DATA_ADDR(target, emalloc(HT_SIZE(target)));
20102011
target->nInternalPointer = source->nInternalPointer;
20112012
memcpy(HT_GET_DATA_ADDR(target), HT_GET_DATA_ADDR(source), HT_USED_SIZE(source));
@@ -2015,6 +2016,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
20152016
target->nNumUsed = source->nNumUsed;
20162017
target->nNumOfElements = source->nNumOfElements;
20172018
target->nNextFreeElement = source->nNextFreeElement;
2019+
target->nTableSize = source->nTableSize;
20182020
HT_SET_DATA_ADDR(target, emalloc(HT_SIZE_EX(target->nTableSize, HT_MIN_MASK)));
20192021
target->nInternalPointer =
20202022
(source->nInternalPointer < source->nNumUsed) ?
@@ -2035,6 +2037,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
20352037
(source->nInternalPointer < source->nNumUsed) ?
20362038
source->nInternalPointer : 0;
20372039

2040+
target->nTableSize = source->nTableSize;
20382041
HT_SET_DATA_ADDR(target, emalloc(HT_SIZE(target)));
20392042
HT_HASH_RESET(target);
20402043

0 commit comments

Comments
 (0)