@@ -24,6 +24,7 @@ typedef struct {
24
24
zend_object_iterator it ;
25
25
bool by_ref ;
26
26
zval properties ;
27
+ zval current_key ;
27
28
zval current_data ;
28
29
} zend_hooked_object_iterator ;
29
30
@@ -89,6 +90,10 @@ static zend_result zend_hooked_object_it_fetch_current_data(zend_object_iterator
89
90
ZVAL_UNDEF (& hooked_iter -> current_data );
90
91
zend_object * zobj = Z_OBJ_P (& iter -> data );
91
92
zend_array * properties = Z_ARR (hooked_iter -> properties );
93
+
94
+ zval_ptr_dtor_nogc (& hooked_iter -> current_key );
95
+ zend_hash_get_current_key_zval (properties , & hooked_iter -> current_key );
96
+
92
97
zval * property = zend_hash_get_current_data (properties );
93
98
if (Z_TYPE_P (property ) == IS_PTR ) {
94
99
zend_property_info * prop_info = Z_PTR_P (property );
@@ -117,6 +122,7 @@ static void zend_hooked_object_it_dtor(zend_object_iterator *iter)
117
122
zend_hooked_object_iterator * hooked_iter = (zend_hooked_object_iterator * )iter ;
118
123
zval_ptr_dtor (& iter -> data );
119
124
zval_ptr_dtor (& hooked_iter -> properties );
125
+ zval_ptr_dtor_nogc (& hooked_iter -> current_key );
120
126
zval_ptr_dtor (& hooked_iter -> current_data );
121
127
}
122
128
@@ -136,8 +142,7 @@ static zval *zend_hooked_object_it_get_current_data(zend_object_iterator *iter)
136
142
static void zend_hooked_object_it_get_current_key (zend_object_iterator * iter , zval * key )
137
143
{
138
144
zend_hooked_object_iterator * hooked_iter = (zend_hooked_object_iterator * )iter ;
139
- zend_array * properties = Z_ARR (hooked_iter -> properties );
140
- zend_hash_get_current_key_zval (properties , key );
145
+ ZVAL_COPY (key , & hooked_iter -> current_key );
141
146
}
142
147
143
148
static void zend_hooked_object_it_move_forward (zend_object_iterator * iter )
@@ -189,6 +194,7 @@ ZEND_API zend_object_iterator *zend_hooked_object_get_iterator(zend_class_entry
189
194
iterator -> by_ref = by_ref ;
190
195
zend_array * properties = zend_hooked_object_build_properties_ex (Z_OBJ_P (object ), true);
191
196
ZVAL_ARR (& iterator -> properties , properties );
197
+ ZVAL_UNDEF (& iterator -> current_key );
192
198
ZVAL_UNDEF (& iterator -> current_data );
193
199
194
200
return & iterator -> it ;
0 commit comments