@@ -122,16 +122,12 @@ void php_mp_pack_array_recursively(smart_string *str, zval *val) {
122
122
size_t key_index = 0 ;
123
123
for (; key_index < n ; ++ key_index ) {
124
124
data = zend_hash_index_find (ht , key_index );
125
- if (!data || data == val || (Z_TYPE_P (data ) == IS_ARRAY &&
126
- ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )) &&
127
- Z_ARRVAL_P (data )-> u .v .nApplyCount > 1 )) {
125
+ if (!data || data == val || ARRAY_IS_RECURSIVE (data )) {
128
126
php_mp_pack_nil (str );
129
127
} else {
130
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
131
- Z_ARRVAL_P (data )-> u .v .nApplyCount ++ ;
128
+ ARRAY_PROTECT_RECURSION (data );
132
129
php_mp_pack (str , data );
133
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
134
- Z_ARRVAL_P (data )-> u .v .nApplyCount -- ;
130
+ ARRAY_UNPROTECT_RECURSION (data );
135
131
}
136
132
}
137
133
}
@@ -165,16 +161,12 @@ void php_mp_pack_hash_recursively(smart_string *str, zval *val) {
165
161
break ;
166
162
}
167
163
data = zend_hash_get_current_data_ex (ht , & pos );
168
- if (!data || data == val || (Z_TYPE_P (data ) == IS_ARRAY &&
169
- ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )) &&
170
- Z_ARRVAL_P (data )-> u .v .nApplyCount > 1 )) {
164
+ if (!data || data == val || ARRAY_IS_RECURSIVE (data )) {
171
165
php_mp_pack_nil (str );
172
166
} else {
173
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
174
- Z_ARRVAL_P (data )-> u .v .nApplyCount ++ ;
167
+ ARRAY_PROTECT_RECURSION (data );
175
168
php_mp_pack (str , data );
176
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
177
- Z_ARRVAL_P (data )-> u .v .nApplyCount -- ;
169
+ ARRAY_UNPROTECT_RECURSION (data );
178
170
}
179
171
}
180
172
}
@@ -407,15 +399,12 @@ size_t php_mp_sizeof_array_recursively(zval *val) {
407
399
408
400
for (; key_index < n ; ++ key_index ) {
409
401
data = zend_hash_index_find (ht , key_index );
410
- if (!data || data == val ||
411
- (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )) && Z_ARRVAL_P (data )-> u .v .nApplyCount > 1 )) {
402
+ if (!data || data == val || ARRAY_IS_RECURSIVE (data )) {
412
403
needed += php_mp_sizeof_nil ();
413
404
} else {
414
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
415
- Z_ARRVAL_P (data )-> u .v .nApplyCount ++ ;
405
+ ARRAY_PROTECT_RECURSION (data );
416
406
needed += php_mp_sizeof (data );
417
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
418
- Z_ARRVAL_P (data )-> u .v .nApplyCount -- ;
407
+ ARRAY_UNPROTECT_RECURSION (data );
419
408
}
420
409
}
421
410
return needed ;
@@ -451,15 +440,12 @@ size_t php_mp_sizeof_hash_recursively(zval *val) {
451
440
break ;
452
441
}
453
442
data = zend_hash_get_current_data_ex (ht , & pos );
454
- if (!data || data == val ||
455
- (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )) && Z_ARRVAL_P (data )-> u .v .nApplyCount > 1 )) {
443
+ if (!data || data == val || ARRAY_IS_RECURSIVE (data )) {
456
444
needed += php_mp_sizeof_nil ();
457
445
} else {
458
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
459
- Z_ARRVAL_P (data )-> u .v .nApplyCount ++ ;
446
+ ARRAY_PROTECT_RECURSION (data );
460
447
needed += php_mp_sizeof (data );
461
- if (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data )))
462
- Z_ARRVAL_P (data )-> u .v .nApplyCount -- ;
448
+ ARRAY_UNPROTECT_RECURSION (data );
463
449
}
464
450
}
465
451
return needed ;
0 commit comments