@@ -682,7 +682,6 @@ PHP_METHOD(SplObjectStorage, unserialize)
682
682
size_t buf_len ;
683
683
const unsigned char * p , * s ;
684
684
php_unserialize_data_t var_hash ;
685
- zval entry , inf ;
686
685
zval * pcount , * pmembers ;
687
686
spl_SplObjectStorageElement * element ;
688
687
zend_long count ;
@@ -715,13 +714,12 @@ PHP_METHOD(SplObjectStorage, unserialize)
715
714
goto outexcept ;
716
715
}
717
716
718
- ZVAL_UNDEF (& entry );
719
- ZVAL_UNDEF (& inf );
720
-
721
717
while (count -- > 0 ) {
722
718
spl_SplObjectStorageElement * pelement ;
723
719
zend_hash_key key ;
724
- zval obj ;
720
+ zval * entry = var_tmp_var (& var_hash );
721
+ zval inf ;
722
+ ZVAL_UNDEF (& inf );
725
723
726
724
if (* p != ';' ) {
727
725
goto outexcept ;
@@ -731,46 +729,38 @@ PHP_METHOD(SplObjectStorage, unserialize)
731
729
goto outexcept ;
732
730
}
733
731
/* store reference to allow cross-references between different elements */
734
- if (!php_var_unserialize (& entry , & p , s + buf_len , & var_hash )) {
735
- zval_ptr_dtor (& entry );
732
+ if (!php_var_unserialize (entry , & p , s + buf_len , & var_hash )) {
736
733
goto outexcept ;
737
734
}
738
735
if (* p == ',' ) { /* new version has inf */
739
736
++ p ;
740
737
if (!php_var_unserialize (& inf , & p , s + buf_len , & var_hash )) {
741
- zval_ptr_dtor (& entry );
742
738
zval_ptr_dtor (& inf );
743
739
goto outexcept ;
744
740
}
745
741
}
746
- if (Z_TYPE (entry ) != IS_OBJECT ) {
747
- zval_ptr_dtor (& entry );
742
+ if (Z_TYPE_P (entry ) != IS_OBJECT ) {
748
743
zval_ptr_dtor (& inf );
749
744
goto outexcept ;
750
745
}
751
746
752
- if (spl_object_storage_get_hash (& key , intern , Z_OBJ (entry )) == FAILURE ) {
753
- zval_ptr_dtor (& entry );
747
+ if (spl_object_storage_get_hash (& key , intern , Z_OBJ_P (entry )) == FAILURE ) {
754
748
zval_ptr_dtor (& inf );
755
749
goto outexcept ;
756
750
}
757
751
pelement = spl_object_storage_get (intern , & key );
758
752
spl_object_storage_free_hash (intern , & key );
759
753
if (pelement ) {
754
+ zval obj ;
760
755
if (!Z_ISUNDEF (pelement -> inf )) {
761
756
var_push_dtor (& var_hash , & pelement -> inf );
762
757
}
763
758
ZVAL_OBJ (& obj , pelement -> obj );
764
759
var_push_dtor (& var_hash , & obj );
765
760
}
766
- element = spl_object_storage_attach (intern , Z_OBJ (entry ), Z_ISUNDEF (inf )?NULL :& inf );
767
- ZVAL_OBJ (& obj , element -> obj );
768
- var_replace (& var_hash , & entry , & obj );
761
+ element = spl_object_storage_attach (intern , Z_OBJ_P (entry ), Z_ISUNDEF (inf )?NULL :& inf );
769
762
var_replace (& var_hash , & inf , & element -> inf );
770
- zval_ptr_dtor (& entry );
771
- ZVAL_UNDEF (& entry );
772
763
zval_ptr_dtor (& inf );
773
- ZVAL_UNDEF (& inf );
774
764
}
775
765
776
766
if (* p != ';' ) {
0 commit comments