@@ -132,12 +132,12 @@ PHPAPI void php_var_dump(zval *struc, int level) /* {{{ */
132
132
}
133
133
count = zend_array_count (myht );
134
134
php_printf ("%sarray(%d) {\n" , COMMON , count );
135
-
136
135
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , num , key , val ) {
137
136
php_array_element_dump (val , num , key , level );
138
137
} ZEND_HASH_FOREACH_END ();
139
138
if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
140
139
GC_UNPROTECT_RECURSION (myht );
140
+ GC_DELREF (myht );
141
141
}
142
142
if (level > 1 ) {
143
143
php_printf ("%*c" , level - 1 , ' ' );
@@ -303,20 +303,26 @@ PHPAPI void php_debug_zval_dump(zval *struc, int level) /* {{{ */
303
303
break ;
304
304
case IS_ARRAY :
305
305
myht = Z_ARRVAL_P (struc );
306
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
307
- if (GC_IS_RECURSIVE (myht )) {
308
- PUTS ("*RECURSION*\n" );
309
- return ;
306
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
307
+ if (level > 1 ) {
308
+ if (GC_IS_RECURSIVE (myht )) {
309
+ PUTS ("*RECURSION*\n" );
310
+ return ;
311
+ }
312
+ GC_PROTECT_RECURSION (myht );
310
313
}
311
- GC_PROTECT_RECURSION (myht );
314
+ GC_ADDREF (myht );
312
315
}
313
316
count = zend_array_count (myht );
314
317
php_printf ("%sarray(%d) refcount(%u){\n" , COMMON , count , Z_REFCOUNTED_P (struc ) ? Z_REFCOUNT_P (struc ) : 1 );
315
318
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , index , key , val ) {
316
319
zval_array_element_dump (val , index , key , level );
317
320
} ZEND_HASH_FOREACH_END ();
318
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
319
- GC_UNPROTECT_RECURSION (myht );
321
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
322
+ if (level > 1 ) {
323
+ GC_UNPROTECT_RECURSION (myht );
324
+ }
325
+ GC_DELREF (myht );
320
326
}
321
327
if (level > 1 ) {
322
328
php_printf ("%*c" , level - 1 , ' ' );
@@ -519,6 +525,7 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */
519
525
zend_error (E_WARNING , "var_export does not handle circular references" );
520
526
return ;
521
527
}
528
+ GC_ADDREF (myht );
522
529
GC_PROTECT_RECURSION (myht );
523
530
}
524
531
if (level > 1 ) {
@@ -529,7 +536,6 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */
529
536
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , index , key , val ) {
530
537
php_array_element_export (val , index , key , level , buf );
531
538
} ZEND_HASH_FOREACH_END ();
532
-
533
539
if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
534
540
GC_UNPROTECT_RECURSION (myht );
535
541
GC_DELREF (myht );
0 commit comments