From 6d8bba6a4a7d0590693c4759f1d22a8e642dab93 Mon Sep 17 00:00:00 2001 From: SVN Migration Date: Sun, 2 Jan 2005 06:51:04 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'PHP_4_3'. --- ext/standard/tests/array/bug29493.phpt | 115 +++++++++++++++++++++++++ ext/standard/tests/array/bug31213.phpt | 55 ++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 ext/standard/tests/array/bug29493.phpt create mode 100644 ext/standard/tests/array/bug31213.phpt diff --git a/ext/standard/tests/array/bug29493.phpt b/ext/standard/tests/array/bug29493.phpt new file mode 100644 index 0000000000..0cfe45910b --- /dev/null +++ b/ext/standard/tests/array/bug29493.phpt @@ -0,0 +1,115 @@ +--TEST-- +Bug #29493 (extract(EXTR_REFS) fails if array has multiple referrals) +--FILE-- + 'aaa'); + // refcount($a) = 1 + // refcount($a['foo']) = 1 + $b = $a; + // refcount($a) = 2 + // refcount($a['foo']) = 1 + $b['foo'] = 'bbb'; + // refcount($a) = 1 + // refcount($a['foo']) = 1 + + var_dump($a, $b); + + extract($a, EXTR_REFS); + + $foo = 'noo'; + + var_dump($a, $b); +} + +function t2() +{ + $a = array('foo' => 'aaa'); + // refcount($a) = 1 + // refcount($a['foo']) = 1 + $b = &$a; + // refcount($a) = 2 + // is_ref($a) = true + // refcount($a['foo']) = 1 + $b['foo'] = 'bbb'; + // refcount($a) = 2 + // refcount($a['foo']) = 1 + + var_dump($a, $b); + + extract($a, EXTR_REFS); + + $foo = 'noo'; + + var_dump($a, $b); +} + +function t3() +{ + $a = array('foo' => 'aaa'); + // refcount($a) = 1 + // refcount($a['foo']) = 1 + $b = &$a; + // refcount($a) = 2 + // is_ref($a) = true + // refcount($a['foo']) = 1 + unset($b); + // refcount($a) = 1 + // is_ref($a) = true + // refcount($a['foo']) = 1 + + var_dump($a); + + extract($a, EXTR_REFS); + + $foo = 'noo'; + + var_dump($a); +} + +t1(); +t2(); +t3(); +?> +--EXPECT-- +array(1) { + ["foo"]=> + string(3) "aaa" +} +array(1) { + ["foo"]=> + string(3) "bbb" +} +array(1) { + ["foo"]=> + &string(3) "noo" +} +array(1) { + ["foo"]=> + string(3) "bbb" +} +array(1) { + ["foo"]=> + string(3) "bbb" +} +array(1) { + ["foo"]=> + string(3) "bbb" +} +array(1) { + ["foo"]=> + &string(3) "noo" +} +array(1) { + ["foo"]=> + &string(3) "noo" +} +array(1) { + ["foo"]=> + string(3) "aaa" +} +array(1) { + ["foo"]=> + &string(3) "noo" +} diff --git a/ext/standard/tests/array/bug31213.phpt b/ext/standard/tests/array/bug31213.phpt new file mode 100644 index 0000000000..55ad88110d --- /dev/null +++ b/ext/standard/tests/array/bug31213.phpt @@ -0,0 +1,55 @@ +--TEST-- +Bug #31213 (Sideeffects caused by bug #29493) +--FILE-- + $a, + '_b' => &$b + ); + + var_dump($a, $b); + + if ($use_extract) { + extract($arr, EXTR_REFS); + } else { + $_a = &$arr['_a']; + $_b = &$arr['_b']; + } + + $_a++; + $_b++; + + var_dump($a, $b, $_a, $_b, $arr); +} + +test(false); +test(true); +--EXPECT-- +int(1) +int(1) +int(1) +int(2) +int(2) +int(2) +array(2) { + ["_a"]=> + &int(2) + ["_b"]=> + &int(2) +} +int(1) +int(1) +int(1) +int(2) +int(2) +int(2) +array(2) { + ["_a"]=> + &int(2) + ["_b"]=> + &int(2) +} -- 2.40.0