summaryrefslogtreecommitdiff
path: root/Zend/zend_hash.c
diff options
context:
space:
mode:
authorPedro Magalhães <mail@pmmaga.net>2018-10-04 23:28:53 +0100
committerNikita Popov <nikita.ppv@gmail.com>2018-10-05 12:14:42 +0200
commitc2c202193ae6433d09234d2e45f04e62e51deb83 (patch)
tree59273f3ac4d971496ce65847b4a5be0b4b4a8373 /Zend/zend_hash.c
parenta515f607906b25dee795a712097a0599e4aceedb (diff)
downloadphp-git-c2c202193ae6433d09234d2e45f04e62e51deb83.tar.gz
Use HT_MIN_SIZE when duplicating an empty array
Diffstat (limited to 'Zend/zend_hash.c')
-rw-r--r--Zend/zend_hash.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index c68d1ff16c..51ea2ba348 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -1989,7 +1989,6 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
GC_SET_REFCOUNT(target, 1);
GC_TYPE_INFO(target) = IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT);
- target->nTableSize = source->nTableSize;
target->pDestructor = ZVAL_PTR_DTOR;
if (source->nNumOfElements == 0) {
@@ -1999,6 +1998,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
target->nNumOfElements = 0;
target->nNextFreeElement = 0;
target->nInternalPointer = 0;
+ target->nTableSize = HT_MIN_SIZE;
HT_SET_DATA_ADDR(target, &uninitialized_bucket);
} else if (GC_FLAGS(source) & IS_ARRAY_IMMUTABLE) {
HT_FLAGS(target) = HT_FLAGS(source);
@@ -2006,6 +2006,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
target->nNumUsed = source->nNumUsed;
target->nNumOfElements = source->nNumOfElements;
target->nNextFreeElement = source->nNextFreeElement;
+ target->nTableSize = source->nTableSize;
HT_SET_DATA_ADDR(target, emalloc(HT_SIZE(target)));
target->nInternalPointer = source->nInternalPointer;
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)
target->nNumUsed = source->nNumUsed;
target->nNumOfElements = source->nNumOfElements;
target->nNextFreeElement = source->nNextFreeElement;
+ target->nTableSize = source->nTableSize;
HT_SET_DATA_ADDR(target, emalloc(HT_SIZE_EX(target->nTableSize, HT_MIN_MASK)));
target->nInternalPointer =
(source->nInternalPointer < source->nNumUsed) ?
@@ -2035,6 +2037,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
(source->nInternalPointer < source->nNumUsed) ?
source->nInternalPointer : 0;
+ target->nTableSize = source->nTableSize;
HT_SET_DATA_ADDR(target, emalloc(HT_SIZE(target)));
HT_HASH_RESET(target);