@@ -609,7 +609,7 @@ PHP_METHOD(SplFixedArray, __serialize)
609
609
610
610
/* members */
611
611
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 );
613
613
Z_TRY_ADDREF_P (current );
614
614
} ZEND_HASH_FOREACH_END ();
615
615
}
@@ -620,7 +620,7 @@ PHP_METHOD(SplFixedArray, __unserialize)
620
620
HashTable * data ;
621
621
zval members_zv , * elem ;
622
622
zend_string * key ;
623
- zend_long idx , size , array_size ;
623
+ zend_long idx , size ;
624
624
625
625
if (zend_parse_parameters (ZEND_NUM_ARGS (), "h" , & data ) == FAILURE ) {
626
626
RETURN_THROWS ();
@@ -631,20 +631,23 @@ PHP_METHOD(SplFixedArray, __unserialize)
631
631
spl_fixedarray_init_non_empty_struct (& intern -> array , size );
632
632
array_init (& members_zv );
633
633
634
- array_size = 0 ;
634
+ intern -> array . size = 0 ;
635
635
ZEND_HASH_FOREACH_KEY_VAL (data , idx , key , elem ) {
636
636
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 ++ ;
639
639
} 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 );
643
642
}
644
643
} ZEND_HASH_FOREACH_END ();
645
644
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
+ }
648
651
649
652
object_properties_load (& intern -> std , Z_ARRVAL (members_zv ));
650
653
zval_ptr_dtor (& members_zv );
0 commit comments