Skip to content

Commit 1d28a7b

Browse files
committed
Merge branch 'PHP-8.2'
* PHP-8.2: Fix serialization of empty SplFixedArray
2 parents 59894c7 + 70ad93d commit 1d28a7b

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

ext/spl/spl_fixedarray.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -596,8 +596,9 @@ PHP_METHOD(SplFixedArray, __serialize)
596596
RETURN_THROWS();
597597
}
598598

599-
uint32_t property_num = zend_hash_num_elements(intern->std.properties);
600-
array_init_size(return_value, intern->array.size + property_num);
599+
uint32_t num_properties =
600+
intern->std.properties ? zend_hash_num_elements(intern->std.properties) : 0;
601+
array_init_size(return_value, intern->array.size + num_properties);
601602

602603
/* elements */
603604
for (zend_long i = 0; i < intern->array.size; i++) {
@@ -607,10 +608,12 @@ PHP_METHOD(SplFixedArray, __serialize)
607608
}
608609

609610
/* members */
610-
ZEND_HASH_FOREACH_STR_KEY_VAL(intern->std.properties, key, current) {
611-
zend_hash_add(Z_ARRVAL_P(return_value), key, current);
612-
Z_TRY_ADDREF_P(current);
613-
} ZEND_HASH_FOREACH_END();
611+
if (intern->std.properties) {
612+
ZEND_HASH_FOREACH_STR_KEY_VAL(intern->std.properties, key, current) {
613+
zend_hash_add(Z_ARRVAL_P(return_value), key, current);
614+
Z_TRY_ADDREF_P(current);
615+
} ZEND_HASH_FOREACH_END();
616+
}
614617
}
615618

616619
PHP_METHOD(SplFixedArray, __unserialize)

ext/spl/tests/SplFixedArray_serialize.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ $array->__unserialize([
3838
]);
3939
var_dump($array);
4040

41+
var_dump($s = serialize(new SplFixedArray));
42+
var_dump(unserialize($s));
43+
4144
?>
4245
--EXPECTF--
4346
Deprecated: Creation of dynamic property SplFixedArray::$foo is deprecated in %s on line %d
@@ -71,3 +74,6 @@ object(SplFixedArray)#5 (1) {
7174
[0]=>
7275
NULL
7376
}
77+
string(25) "O:13:"SplFixedArray":0:{}"
78+
object(SplFixedArray)#1 (0) {
79+
}

0 commit comments

Comments
 (0)