diff options
author | Moriyoshi Koizumi <moriyoshi@php.net> | 2003-10-02 22:50:28 +0000 |
---|---|---|
committer | Moriyoshi Koizumi <moriyoshi@php.net> | 2003-10-02 22:50:28 +0000 |
commit | 76ae0648830e3b1b019efbcfd2fd4c138d1a5a5f (patch) | |
tree | 0ea345739c25f8817d2f51ff799202c5639f0c38 /ext | |
parent | 75bb36ed09af2ece66b30ae9261fb11748301b82 (diff) | |
download | php-git-76ae0648830e3b1b019efbcfd2fd4c138d1a5a5f.tar.gz |
Add a test case for bug #25708
Diffstat (limited to 'ext')
-rw-r--r-- | ext/standard/tests/array/bug25708.phpt | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/ext/standard/tests/array/bug25708.phpt b/ext/standard/tests/array/bug25708.phpt new file mode 100644 index 0000000000..d3da3e3399 --- /dev/null +++ b/ext/standard/tests/array/bug25708.phpt @@ -0,0 +1,223 @@ +--TEST-- +Bug #25708 (extract($GLOBALS, EXTR_REFS) mangles $GLOBALS) +--FILE-- +<?php +function foo($ref, $alt) { + unset($GLOBALS['a']); + unset($GLOBALS['b']); + $GLOBALS['a'] = 1; + $GLOBALS['b'] = 2; + + $org_a = $GLOBALS['a']; + $org_b = $GLOBALS['b']; + + if ($ref) { + global $a, $b; + } else { + /* zval temp_var(NULL); // refcount = 1 + * a = temp_var[x] // refcount = 2 + */ + $a = NULL; + $b = NULL; + } + + debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']); + echo "--\n"; + if ($alt) { + $a = &$GLOBALS['a']; + $b = &$GLOBALS['b']; + } else { + extract($GLOBALS, EXTR_REFS); + } + debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']); + echo "--\n"; + $a = &$GLOBALS['a']; + $b = &$GLOBALS['b']; + debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']); + echo "--\n"; + $GLOBALS['b'] = 3; + debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']); + echo "--\n"; + $a = 4; + debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']); + echo "--\n"; + $c = $b; + debug_zval_dump($b, $GLOBALS['b'], $c); + echo "--\n"; + $b = 'x'; + debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c); + echo "--\n"; + debug_zval_dump($org_a, $org_b); + echo "----"; + if ($ref) echo 'r'; + if ($alt) echo 'a'; + echo "\n"; +} + +$a = 'ok'; +$b = 'ok'; +$_a = $a; +$_b = $b; + +foo(false, true); +foo(true, true); +foo(false, false); +foo(true, false); + +debug_zval_dump($_a, $_b); +?> +--EXPECT-- +NULL refcount(2) +NULL refcount(2) +long(1) refcount(3) +long(2) refcount(3) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(3) refcount(1) +long(1) refcount(1) +long(3) refcount(1) +-- +long(4) refcount(1) +long(3) refcount(1) +long(4) refcount(1) +long(3) refcount(1) +-- +long(3) refcount(1) +long(3) refcount(1) +long(3) refcount(2) +-- +long(4) refcount(1) +string(1) "x" refcount(1) +long(4) refcount(1) +string(1) "x" refcount(1) +long(3) refcount(2) +-- +long(1) refcount(2) +long(2) refcount(2) +----a +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(3) refcount(1) +long(1) refcount(1) +long(3) refcount(1) +-- +long(4) refcount(1) +long(3) refcount(1) +long(4) refcount(1) +long(3) refcount(1) +-- +long(3) refcount(1) +long(3) refcount(1) +long(3) refcount(2) +-- +long(4) refcount(1) +string(1) "x" refcount(1) +long(4) refcount(1) +string(1) "x" refcount(1) +long(3) refcount(2) +-- +long(1) refcount(2) +long(2) refcount(2) +----ra +NULL refcount(2) +NULL refcount(2) +long(1) refcount(3) +long(2) refcount(3) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(3) refcount(1) +long(1) refcount(1) +long(3) refcount(1) +-- +long(4) refcount(1) +long(3) refcount(1) +long(4) refcount(1) +long(3) refcount(1) +-- +long(3) refcount(1) +long(3) refcount(1) +long(3) refcount(2) +-- +long(4) refcount(1) +string(1) "x" refcount(1) +long(4) refcount(1) +string(1) "x" refcount(1) +long(3) refcount(2) +-- +long(1) refcount(2) +long(2) refcount(2) +---- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(2) refcount(1) +long(1) refcount(1) +long(2) refcount(1) +-- +long(1) refcount(1) +long(3) refcount(1) +long(1) refcount(1) +long(3) refcount(1) +-- +long(4) refcount(1) +long(3) refcount(1) +long(4) refcount(1) +long(3) refcount(1) +-- +long(3) refcount(1) +long(3) refcount(1) +long(3) refcount(2) +-- +long(4) refcount(1) +string(1) "x" refcount(1) +long(4) refcount(1) +string(1) "x" refcount(1) +long(3) refcount(2) +-- +long(1) refcount(2) +long(2) refcount(2) +----r +string(2) "ok" refcount(2) +string(2) "ok" refcount(2) |