Annotation of embedaddon/php/ext/standard/tests/array/bug25708.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Bug #25708 (extract($GLOBALS, EXTR_REFS) mangles $GLOBALS)
3: --FILE--
4: <?php
5: function foo($ref, $alt) {
6: unset($GLOBALS['a']);
7: unset($GLOBALS['b']);
8: $GLOBALS['a'] = 1;
9: $GLOBALS['b'] = 2;
10:
11: $org_a = $GLOBALS['a'];
12: $org_b = $GLOBALS['b'];
13:
14: if ($ref) {
15: global $a, $b;
16: } else {
17: /* zval temp_var(NULL); // refcount = 1
18: * a = temp_var[x] // refcount = 2
19: */
20: $a = NULL;
21: $b = NULL;
22: }
23:
24: debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
25: echo "--\n";
26: if ($alt) {
27: $a = &$GLOBALS['a'];
28: $b = &$GLOBALS['b'];
29: } else {
30: extract($GLOBALS, EXTR_REFS);
31: }
32: debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
33: echo "--\n";
34: $a = &$GLOBALS['a'];
35: $b = &$GLOBALS['b'];
36: debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
37: echo "--\n";
38: $GLOBALS['b'] = 3;
39: debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
40: echo "--\n";
41: $a = 4;
42: debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
43: echo "--\n";
44: $c = $b;
45: debug_zval_dump($b, $GLOBALS['b'], $c);
46: echo "--\n";
47: $b = 'x';
48: debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c);
49: echo "--\n";
50: debug_zval_dump($org_a, $org_b);
51: echo "----";
52: if ($ref) echo 'r';
53: if ($alt) echo 'a';
54: echo "\n";
55: }
56:
57: $a = 'ok';
58: $b = 'ok';
59: $_a = $a;
60: $_b = $b;
61:
62: foo(false, true);
63: foo(true, true);
64: foo(false, false);
65: foo(true, false);
66:
67: debug_zval_dump($_a, $_b);
68: ?>
69: --EXPECT--
70: NULL refcount(2)
71: NULL refcount(2)
72: long(1) refcount(3)
73: long(2) refcount(3)
74: --
75: long(1) refcount(1)
76: long(2) refcount(1)
77: long(1) refcount(1)
78: long(2) refcount(1)
79: --
80: long(1) refcount(1)
81: long(2) refcount(1)
82: long(1) refcount(1)
83: long(2) refcount(1)
84: --
85: long(1) refcount(1)
86: long(3) refcount(1)
87: long(1) refcount(1)
88: long(3) refcount(1)
89: --
90: long(4) refcount(1)
91: long(3) refcount(1)
92: long(4) refcount(1)
93: long(3) refcount(1)
94: --
95: long(3) refcount(1)
96: long(3) refcount(1)
97: long(3) refcount(2)
98: --
99: long(4) refcount(1)
100: string(1) "x" refcount(1)
101: long(4) refcount(1)
102: string(1) "x" refcount(1)
103: long(3) refcount(2)
104: --
105: long(1) refcount(2)
106: long(2) refcount(2)
107: ----a
108: long(1) refcount(1)
109: long(2) refcount(1)
110: long(1) refcount(1)
111: long(2) refcount(1)
112: --
113: long(1) refcount(1)
114: long(2) refcount(1)
115: long(1) refcount(1)
116: long(2) refcount(1)
117: --
118: long(1) refcount(1)
119: long(2) refcount(1)
120: long(1) refcount(1)
121: long(2) refcount(1)
122: --
123: long(1) refcount(1)
124: long(3) refcount(1)
125: long(1) refcount(1)
126: long(3) refcount(1)
127: --
128: long(4) refcount(1)
129: long(3) refcount(1)
130: long(4) refcount(1)
131: long(3) refcount(1)
132: --
133: long(3) refcount(1)
134: long(3) refcount(1)
135: long(3) refcount(2)
136: --
137: long(4) refcount(1)
138: string(1) "x" refcount(1)
139: long(4) refcount(1)
140: string(1) "x" refcount(1)
141: long(3) refcount(2)
142: --
143: long(1) refcount(2)
144: long(2) refcount(2)
145: ----ra
146: NULL refcount(2)
147: NULL refcount(2)
148: long(1) refcount(3)
149: long(2) refcount(3)
150: --
151: long(1) refcount(1)
152: long(2) refcount(1)
153: long(1) refcount(1)
154: long(2) refcount(1)
155: --
156: long(1) refcount(1)
157: long(2) refcount(1)
158: long(1) refcount(1)
159: long(2) refcount(1)
160: --
161: long(1) refcount(1)
162: long(3) refcount(1)
163: long(1) refcount(1)
164: long(3) refcount(1)
165: --
166: long(4) refcount(1)
167: long(3) refcount(1)
168: long(4) refcount(1)
169: long(3) refcount(1)
170: --
171: long(3) refcount(1)
172: long(3) refcount(1)
173: long(3) refcount(2)
174: --
175: long(4) refcount(1)
176: string(1) "x" refcount(1)
177: long(4) refcount(1)
178: string(1) "x" refcount(1)
179: long(3) refcount(2)
180: --
181: long(1) refcount(2)
182: long(2) refcount(2)
183: ----
184: long(1) refcount(1)
185: long(2) refcount(1)
186: long(1) refcount(1)
187: long(2) refcount(1)
188: --
189: long(1) refcount(1)
190: long(2) refcount(1)
191: long(1) refcount(1)
192: long(2) refcount(1)
193: --
194: long(1) refcount(1)
195: long(2) refcount(1)
196: long(1) refcount(1)
197: long(2) refcount(1)
198: --
199: long(1) refcount(1)
200: long(3) refcount(1)
201: long(1) refcount(1)
202: long(3) refcount(1)
203: --
204: long(4) refcount(1)
205: long(3) refcount(1)
206: long(4) refcount(1)
207: long(3) refcount(1)
208: --
209: long(3) refcount(1)
210: long(3) refcount(1)
211: long(3) refcount(2)
212: --
213: long(4) refcount(1)
214: string(1) "x" refcount(1)
215: long(4) refcount(1)
216: string(1) "x" refcount(1)
217: long(3) refcount(2)
218: --
219: long(1) refcount(2)
220: long(2) refcount(2)
221: ----r
222: string(2) "ok" refcount(2)
223: string(2) "ok" refcount(2)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>