@@ -280,15 +280,41 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
280280 value_noref = value ;
281281 }
282282
283- if ((Z_TYPE_P (value_noref ) == IS_ARRAY && ZEND_HASH_GET_APPLY_COUNT (Z_ARRVAL_P (value_noref )) > 1 )) {
283+ if (Z_TYPE_P (value_noref ) == IS_ARRAY &&
284+ #if PHP_VERSION_ID < 70300
285+ ZEND_HASH_GET_APPLY_COUNT (Z_ARRVAL_P (value_noref ))
286+ #else
287+ Z_IS_RECURSIVE_P (value_noref )
288+ #endif
289+ ) {
284290 msgpack_pack_nil (buf );
285291 } else {
286- if (Z_TYPE_P (value_noref ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (value_noref ))) {
292+ if (Z_TYPE_P (value_noref ) == IS_ARRAY &&
293+ #if PHP_VERSION_ID < 70300
294+ ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (value_noref ))
295+ #else
296+ Z_REFCOUNTED_P (value_noref )
297+ #endif
298+ ) {
299+ #if PHP_VERSION_ID < 70300
287300 ZEND_HASH_INC_APPLY_COUNT (Z_ARRVAL_P (value_noref ));
301+ #else
302+ Z_PROTECT_RECURSION_P (value_noref );
303+ #endif
288304 }
289305 msgpack_serialize_zval (buf , value , var_hash );
290- if (Z_TYPE_P (value_noref ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (value_noref ))) {
306+ if (Z_TYPE_P (value_noref ) == IS_ARRAY &&
307+ #if PHP_VERSION_ID < 70300
308+ ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (value_noref ))
309+ #else
310+ Z_REFCOUNTED_P (value_noref )
311+ #endif
312+ ) {
313+ #if PHP_VERSION_ID < 70300
291314 ZEND_HASH_DEC_APPLY_COUNT (Z_ARRVAL_P (value_noref ));
315+ #else
316+ Z_UNPROTECT_RECURSION_P (value_noref );
317+ #endif
292318 }
293319 }
294320 } ZEND_HASH_FOREACH_END ();
@@ -297,11 +323,21 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
297323 zval * data , * data_noref ;
298324
299325 for (i = 0 ; i < n ; i ++ ) {
300- if ((data = zend_hash_index_find (ht , i )) == NULL || & data == & val ||
301- (Z_TYPE_P (data ) == IS_ARRAY && ZEND_HASH_GET_APPLY_COUNT (Z_ARRVAL_P (data )) > 1 )) {
326+ if ((data = zend_hash_index_find (ht , i )) == NULL || & data == & val || (Z_TYPE_P (data ) == IS_ARRAY &&
327+ #if PHP_VERSION_ID < 70300
328+ ZEND_HASH_GET_APPLY_COUNT (Z_ARRVAL_P (data ))
329+ #else
330+ Z_IS_RECURSIVE_P (data )
331+ #endif
332+ )) {
302333 msgpack_pack_nil (buf );
303334 } else if (Z_TYPE_P (data ) == IS_REFERENCE && Z_TYPE_P (Z_REFVAL_P (data )) == IS_ARRAY &&
304- ZEND_HASH_GET_APPLY_COUNT (Z_ARRVAL_P (Z_REFVAL_P (data ))) > 1 ) {
335+ #if PHP_VERSION_ID < 70300
336+ ZEND_HASH_GET_APPLY_COUNT (Z_ARRVAL_P (Z_REFVAL_P (data )))
337+ #else
338+ Z_IS_RECURSIVE_P (Z_REFVAL_P (data ))
339+ #endif
340+ ) {
305341 msgpack_pack_nil (buf );
306342 } else {
307343 if (Z_TYPE_P (data ) == IS_REFERENCE ) {
@@ -310,14 +346,34 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
310346 data_noref = data ;
311347 }
312348
313- if (Z_TYPE_P (data_noref ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data_noref ))) {
349+ if (Z_TYPE_P (data_noref ) == IS_ARRAY &&
350+ #if PHP_VERSION_ID < 70300
351+ ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data_noref ))
352+ #else
353+ Z_REFCOUNTED_P (data_noref )
354+ #endif
355+ ) {
356+ #if PHP_VERSION_ID < 70300
314357 ZEND_HASH_INC_APPLY_COUNT (Z_ARRVAL_P (data_noref ));
358+ #else
359+ Z_PROTECT_RECURSION_P (data_noref );
360+ #endif
315361 }
316362
317363 msgpack_serialize_zval (buf , data , var_hash );
318364
319- if (Z_TYPE_P (data_noref ) == IS_ARRAY && ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data_noref ))) {
365+ if (Z_TYPE_P (data_noref ) == IS_ARRAY &&
366+ #if PHP_VERSION_ID < 70300
367+ ZEND_HASH_APPLY_PROTECTION (Z_ARRVAL_P (data_noref ))
368+ #else
369+ Z_REFCOUNTED_P (data_noref )
370+ #endif
371+ ) {
372+ #if PHP_VERSION_ID < 70300
320373 ZEND_HASH_DEC_APPLY_COUNT (Z_ARRVAL_P (data_noref ));
374+ #else
375+ Z_UNPROTECT_RECURSION_P (data_noref );
376+ #endif
321377 }
322378 }
323379 }
0 commit comments