@@ -122,16 +122,12 @@ void php_mp_pack_array_recursively(smart_string *str, zval *val) {
122122 size_t key_index = 0 ;
123123 for (; key_index < n ; ++ key_index ) {
124124 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 )) {
128126 php_mp_pack_nil (str );
129127 } 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 );
132129 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 );
135131 }
136132 }
137133}
@@ -165,16 +161,12 @@ void php_mp_pack_hash_recursively(smart_string *str, zval *val) {
165161 break ;
166162 }
167163 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 )) {
171165 php_mp_pack_nil (str );
172166 } 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 );
175168 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 );
178170 }
179171 }
180172}
@@ -407,15 +399,12 @@ size_t php_mp_sizeof_array_recursively(zval *val) {
407399
408400 for (; key_index < n ; ++ key_index ) {
409401 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 )) {
412403 needed += php_mp_sizeof_nil ();
413404 } 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 );
416406 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 );
419408 }
420409 }
421410 return needed ;
@@ -451,15 +440,12 @@ size_t php_mp_sizeof_hash_recursively(zval *val) {
451440 break ;
452441 }
453442 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 )) {
456444 needed += php_mp_sizeof_nil ();
457445 } 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 );
460447 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 );
463449 }
464450 }
465451 return needed ;
0 commit comments