@@ -127,22 +127,26 @@ PHPAPI void php_var_dump(zval *struc, int level) /* {{{ */
127
127
break ;
128
128
case IS_ARRAY :
129
129
myht = Z_ARRVAL_P (struc );
130
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
131
- if (GC_IS_RECURSIVE (myht )) {
132
- PUTS ("*RECURSION*\n" );
133
- return ;
130
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
131
+ if (level > 1 ) {
132
+ if (GC_IS_RECURSIVE (myht )) {
133
+ PUTS ("*RECURSION*\n" );
134
+ return ;
135
+ }
136
+ GC_PROTECT_RECURSION (myht );
134
137
}
135
138
GC_ADDREF (myht );
136
- GC_PROTECT_RECURSION (myht );
137
139
}
138
140
count = zend_array_count (myht );
139
141
php_printf ("%sarray(%d) {\n" , COMMON , count );
140
-
141
142
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , num , key , val ) {
142
143
php_array_element_dump (val , num , key , level );
143
144
} ZEND_HASH_FOREACH_END ();
144
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
145
- GC_UNPROTECT_RECURSION (myht );
145
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
146
+ if (level > 1 ) {
147
+ GC_UNPROTECT_RECURSION (myht );
148
+ }
149
+ GC_DELREF (myht );
146
150
}
147
151
if (level > 1 ) {
148
152
php_printf ("%*c" , level - 1 , ' ' );
@@ -312,20 +316,26 @@ PHPAPI void php_debug_zval_dump(zval *struc, int level) /* {{{ */
312
316
break ;
313
317
case IS_ARRAY :
314
318
myht = Z_ARRVAL_P (struc );
315
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
316
- if (GC_IS_RECURSIVE (myht )) {
317
- PUTS ("*RECURSION*\n" );
318
- return ;
319
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
320
+ if (level > 1 ) {
321
+ if (GC_IS_RECURSIVE (myht )) {
322
+ PUTS ("*RECURSION*\n" );
323
+ return ;
324
+ }
325
+ GC_PROTECT_RECURSION (myht );
319
326
}
320
- GC_PROTECT_RECURSION (myht );
327
+ GC_ADDREF (myht );
321
328
}
322
329
count = zend_array_count (myht );
323
330
php_printf ("%sarray(%d) refcount(%u){\n" , COMMON , count , Z_REFCOUNTED_P (struc ) ? Z_REFCOUNT_P (struc ) : 1 );
324
331
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , index , key , val ) {
325
332
zval_array_element_dump (val , index , key , level );
326
333
} ZEND_HASH_FOREACH_END ();
327
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
328
- GC_UNPROTECT_RECURSION (myht );
334
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
335
+ if (level > 1 ) {
336
+ GC_UNPROTECT_RECURSION (myht );
337
+ }
338
+ GC_DELREF (myht );
329
339
}
330
340
if (level > 1 ) {
331
341
php_printf ("%*c" , level - 1 , ' ' );
@@ -529,6 +539,7 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */
529
539
zend_error (E_WARNING , "var_export does not handle circular references" );
530
540
return ;
531
541
}
542
+ GC_ADDREF (myht );
532
543
GC_PROTECT_RECURSION (myht );
533
544
}
534
545
if (level > 1 ) {
@@ -539,7 +550,6 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */
539
550
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , index , key , val ) {
540
551
php_array_element_export (val , index , key , level , buf );
541
552
} ZEND_HASH_FOREACH_END ();
542
-
543
553
if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
544
554
GC_UNPROTECT_RECURSION (myht );
545
555
GC_DELREF (myht );
0 commit comments