@@ -117,22 +117,26 @@ PHPAPI void php_var_dump(zval *struc, int level) /* {{{ */
117
117
break ;
118
118
case IS_ARRAY :
119
119
myht = Z_ARRVAL_P (struc );
120
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
121
- if (GC_IS_RECURSIVE (myht )) {
122
- PUTS ("*RECURSION*\n" );
123
- return ;
120
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
121
+ if (level > 1 ) {
122
+ if (GC_IS_RECURSIVE (myht )) {
123
+ PUTS ("*RECURSION*\n" );
124
+ return ;
125
+ }
126
+ GC_PROTECT_RECURSION (myht );
124
127
}
125
128
GC_ADDREF (myht );
126
- GC_PROTECT_RECURSION (myht );
127
129
}
128
130
count = zend_array_count (myht );
129
131
php_printf ("%sarray(%d) {\n" , COMMON , count );
130
-
131
132
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , num , key , val ) {
132
133
php_array_element_dump (val , num , key , level );
133
134
} ZEND_HASH_FOREACH_END ();
134
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
135
- GC_UNPROTECT_RECURSION (myht );
135
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
136
+ if (level > 1 ) {
137
+ GC_UNPROTECT_RECURSION (myht );
138
+ }
139
+ GC_DELREF (myht );
136
140
}
137
141
if (level > 1 ) {
138
142
php_printf ("%*c" , level - 1 , ' ' );
@@ -285,20 +289,26 @@ PHPAPI void php_debug_zval_dump(zval *struc, int level) /* {{{ */
285
289
break ;
286
290
case IS_ARRAY :
287
291
myht = Z_ARRVAL_P (struc );
288
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
289
- if (GC_IS_RECURSIVE (myht )) {
290
- PUTS ("*RECURSION*\n" );
291
- return ;
292
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
293
+ if (level > 1 ) {
294
+ if (GC_IS_RECURSIVE (myht )) {
295
+ PUTS ("*RECURSION*\n" );
296
+ return ;
297
+ }
298
+ GC_PROTECT_RECURSION (myht );
292
299
}
293
- GC_PROTECT_RECURSION (myht );
300
+ GC_ADDREF (myht );
294
301
}
295
302
count = zend_array_count (myht );
296
303
php_printf ("%sarray(%d) refcount(%u){\n" , COMMON , count , Z_REFCOUNTED_P (struc ) ? Z_REFCOUNT_P (struc ) : 1 );
297
304
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , index , key , val ) {
298
305
zval_array_element_dump (val , index , key , level );
299
306
} ZEND_HASH_FOREACH_END ();
300
- if (level > 1 && !(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
301
- GC_UNPROTECT_RECURSION (myht );
307
+ if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
308
+ if (level > 1 ) {
309
+ GC_UNPROTECT_RECURSION (myht );
310
+ }
311
+ GC_DELREF (myht );
302
312
}
303
313
if (is_temp ) {
304
314
zend_hash_destroy (myht );
@@ -497,6 +507,7 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */
497
507
zend_error (E_WARNING , "var_export does not handle circular references" );
498
508
return ;
499
509
}
510
+ GC_ADDREF (myht );
500
511
GC_PROTECT_RECURSION (myht );
501
512
}
502
513
if (level > 1 ) {
@@ -507,7 +518,6 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */
507
518
ZEND_HASH_FOREACH_KEY_VAL_IND (myht , index , key , val ) {
508
519
php_array_element_export (val , index , key , level , buf );
509
520
} ZEND_HASH_FOREACH_END ();
510
-
511
521
if (!(GC_FLAGS (myht ) & GC_IMMUTABLE )) {
512
522
GC_UNPROTECT_RECURSION (myht );
513
523
GC_DELREF (myht );
0 commit comments