Skip to content

Commit 032dcb1

Browse files
committed
Fixes
1 parent d2829e6 commit 032dcb1

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

Diff for: ext/spl/spl_fixedarray.c

+13-10
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ PHP_METHOD(SplFixedArray, __serialize)
609609

610610
/* members */
611611
ZEND_HASH_FOREACH_STR_KEY_VAL(intern->std.properties, key, current) {
612-
zend_hash_str_add(Z_ARRVAL_P(return_value), ZSTR_VAL(key), ZSTR_LEN(key), current);
612+
zend_hash_add(Z_ARRVAL_P(return_value), key, current);
613613
Z_TRY_ADDREF_P(current);
614614
} ZEND_HASH_FOREACH_END();
615615
}
@@ -620,7 +620,7 @@ PHP_METHOD(SplFixedArray, __unserialize)
620620
HashTable *data;
621621
zval members_zv, *elem;
622622
zend_string *key;
623-
zend_long idx, size, array_size;
623+
zend_long idx, size;
624624

625625
if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
626626
RETURN_THROWS();
@@ -631,20 +631,23 @@ PHP_METHOD(SplFixedArray, __unserialize)
631631
spl_fixedarray_init_non_empty_struct(&intern->array, size);
632632
array_init(&members_zv);
633633

634-
array_size = 0;
634+
intern->array.size = 0;
635635
ZEND_HASH_FOREACH_KEY_VAL(data, idx, key, elem) {
636636
if (key == NULL) {
637-
ZVAL_COPY(&intern->array.elements[idx], elem);
638-
array_size++;
637+
ZVAL_COPY(&intern->array.elements[intern->array.size], elem);
638+
intern->array.size++;
639639
} else {
640-
zval tmp;
641-
ZVAL_COPY(&tmp, elem);
642-
zend_hash_add(Z_ARRVAL(members_zv), key, &tmp);
640+
Z_TRY_ADDREF_P(elem);
641+
zend_hash_add(Z_ARRVAL(members_zv), key, elem);
643642
}
644643
} ZEND_HASH_FOREACH_END();
645644

646-
intern->array.elements = erealloc(intern->array.elements, sizeof(zval) * array_size);
647-
intern->array.size = array_size;
645+
if (intern->array.size) {
646+
intern->array.elements = erealloc(intern->array.elements, sizeof(zval) * intern->array.size);
647+
} else {
648+
efree(intern->array.elements);
649+
intern->array.elements = NULL;
650+
}
648651

649652
object_properties_load(&intern->std, Z_ARRVAL(members_zv));
650653
zval_ptr_dtor(&members_zv);

0 commit comments

Comments
 (0)