From: Felipe Pena Date: Fri, 2 Apr 2010 21:44:09 +0000 (+0000) Subject: - Fixed bug #51445 (var_dump() invalid/slow *RECURSION* detection) X-Git-Tag: php-5.2.14RC1~67 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=91690a13e04f498d2f5e0f122c4b0869fe9d0cbf;p=php - Fixed bug #51445 (var_dump() invalid/slow *RECURSION* detection) --- diff --git a/NEWS b/NEWS index a3b7e7f325..7d8924bcac 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,7 @@ PHP NEWS - Fixed a NULL pointer dereference when processing invalid XML-RPC requests (Fixes CVE-2010-0397, bug #51288). (Raphael Geissert) +- Fixed bug #51445 (var_dump() invalid/slow *RECURSION* detection). (Felipe) - Fixed bug #51393 (DateTime::createFromFormat() fails if format string contains timezone). (Adam) - Fixed bug #51338 (URL-Rewriter is still enabled if use_only_cookies is diff --git a/Zend/tests/bug35239.phpt b/Zend/tests/bug35239.phpt index 7fc7b7d3b6..869971e2a2 100755 --- a/Zend/tests/bug35239.phpt +++ b/Zend/tests/bug35239.phpt @@ -12,30 +12,16 @@ var_dump($a); $a->x0->y1 = "ok\n"; echo $a->x0; ?> ---EXPECT-- -object(stdClass)#1 (1) { +--EXPECTF-- +object(stdClass)#%d (1) { ["x0"]=> - &object(stdClass)#2 (3) { + &object(stdClass)#%d (3) { ["y0"]=> string(1) "b" ["y1"]=> - &object(stdClass)#2 (3) { - ["y0"]=> - string(1) "b" - ["y1"]=> - *RECURSION* - ["y2"]=> - *RECURSION* - } + *RECURSION* ["y2"]=> - &object(stdClass)#2 (3) { - ["y0"]=> - string(1) "b" - ["y1"]=> - *RECURSION* - ["y2"]=> - *RECURSION* - } + *RECURSION* } } ok diff --git a/ext/standard/tests/array/array_map_variation2.phpt b/ext/standard/tests/array/array_map_variation2.phpt index 6cd0096b68..9a06154980 100644 --- a/ext/standard/tests/array/array_map_variation2.phpt +++ b/ext/standard/tests/array/array_map_variation2.phpt @@ -47,16 +47,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } } array(4) { @@ -94,16 +85,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } } } @@ -127,16 +109,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } } array(4) { @@ -166,16 +139,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } } } @@ -195,16 +159,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } } array(4) { @@ -240,16 +195,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } [1]=> &array(4) { @@ -260,16 +206,7 @@ array(4) { [0]=> &string(2) "v1" [1]=> - &array(4) { - ["k1"]=> - &string(2) "v1" - ["k2"]=> - string(2) "v2" - [0]=> - &string(2) "v1" - [1]=> - *RECURSION* - } + *RECURSION* } } } diff --git a/ext/standard/tests/array/array_push_variation4.phpt b/ext/standard/tests/array/array_push_variation4.phpt index 1048d80cf2..d6a774ad71 100644 --- a/ext/standard/tests/array/array_push_variation4.phpt +++ b/ext/standard/tests/array/array_push_variation4.phpt @@ -107,28 +107,7 @@ array(10) { [8]=> &string(1) "z" [9]=> - &array(10) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - &string(1) "a" - [4]=> - &string(1) "b" - [5]=> - &string(1) "c" - [6]=> - &string(1) "x" - [7]=> - &string(1) "y" - [8]=> - &string(1) "z" - [9]=> - *RECURSION* - } + *RECURSION* } } Done diff --git a/ext/standard/tests/array/array_values_variation4.phpt b/ext/standard/tests/array/array_values_variation4.phpt index 199d23dc93..ad541175f5 100644 --- a/ext/standard/tests/array/array_values_variation4.phpt +++ b/ext/standard/tests/array/array_values_variation4.phpt @@ -96,23 +96,7 @@ array(4) { int(3) } [0]=> - &array(4) { - ["zero"]=> - string(4) "zero" - ["un"]=> - string(3) "one" - ["sub"]=> - array(3) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - } - [0]=> - *RECURSION* - } + *RECURSION* } } Done diff --git a/ext/standard/tests/array/natcasesort_variation7.phpt b/ext/standard/tests/array/natcasesort_variation7.phpt index eefcd1d6f6..8b94f3fa53 100644 --- a/ext/standard/tests/array/natcasesort_variation7.phpt +++ b/ext/standard/tests/array/natcasesort_variation7.phpt @@ -46,18 +46,7 @@ array(5) { [3]=> string(1) "2" [4]=> - &array(5) { - [0]=> - int(1) - [1]=> - float(3) - [2]=> - string(4) "zero" - [3]=> - string(1) "2" - [4]=> - *RECURSION* - } + *RECURSION* } } bool(true) @@ -77,18 +66,7 @@ array(5) { [1]=> float(3) [4]=> - &array(5) { - [0]=> - int(1) - [3]=> - string(1) "2" - [1]=> - float(3) - [4]=> - *RECURSION* - [2]=> - string(4) "zero" - } + *RECURSION* [2]=> string(4) "zero" } diff --git a/ext/standard/var.c b/ext/standard/var.c index 15d0ab55c7..d52c48b943 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -124,8 +124,9 @@ PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC) break; case IS_ARRAY: myht = Z_ARRVAL_PP(struc); - if (myht->nApplyCount > 1) { + if (++myht->nApplyCount > 1) { PUTS("*RECURSION*\n"); + --myht->nApplyCount; return; } php_printf("%sarray(%d) {\n", COMMON, zend_hash_num_elements(myht)); @@ -133,8 +134,9 @@ PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC) goto head_done; case IS_OBJECT: myht = Z_OBJPROP_PP(struc); - if (myht && myht->nApplyCount > 1) { + if (myht && ++myht->nApplyCount > 1) { PUTS("*RECURSION*\n"); + --myht->nApplyCount; return; } @@ -145,6 +147,7 @@ PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC) head_done: if (myht) { zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_element_dump_func, 1, level); + --myht->nApplyCount; } if (level > 1) { php_printf("%*c", level-1, ' ');