summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2010-04-02 21:44:09 +0000
committerFelipe Pena <felipe@php.net>2010-04-02 21:44:09 +0000
commit91690a13e04f498d2f5e0f122c4b0869fe9d0cbf (patch)
treea3784ac3c2269c051a592e98c5373c1a1b3e225d
parent17542db25fd20ad67638d89b958706179da1ed4c (diff)
downloadphp-git-91690a13e04f498d2f5e0f122c4b0869fe9d0cbf.tar.gz
- Fixed bug #51445 (var_dump() invalid/slow *RECURSION* detection)
-rw-r--r--NEWS1
-rwxr-xr-xZend/tests/bug35239.phpt24
-rw-r--r--ext/standard/tests/array/array_map_variation2.phpt77
-rw-r--r--ext/standard/tests/array/array_push_variation4.phpt23
-rw-r--r--ext/standard/tests/array/array_values_variation4.phpt18
-rw-r--r--ext/standard/tests/array/natcasesort_variation7.phpt26
-rw-r--r--ext/standard/var.c7
7 files changed, 22 insertions, 154 deletions
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, ' ');