summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2003-10-02 22:50:28 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2003-10-02 22:50:28 +0000
commit76ae0648830e3b1b019efbcfd2fd4c138d1a5a5f (patch)
tree0ea345739c25f8817d2f51ff799202c5639f0c38 /ext
parent75bb36ed09af2ece66b30ae9261fb11748301b82 (diff)
downloadphp-git-76ae0648830e3b1b019efbcfd2fd4c138d1a5a5f.tar.gz
Add a test case for bug #25708
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/tests/array/bug25708.phpt223
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)