Annotation of embedaddon/php/ext/standard/tests/array/bug29493.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Bug #29493 (extract(EXTR_REFS) fails if array has multiple referrals)
3: --FILE--
4: <?php
5: function t1()
6: {
7: $a = array('foo' => 'aaa');
8: // refcount($a) = 1
9: // refcount($a['foo']) = 1
10: $b = $a;
11: // refcount($a) = 2
12: // refcount($a['foo']) = 1
13: $b['foo'] = 'bbb';
14: // refcount($a) = 1
15: // refcount($a['foo']) = 1
16:
17: var_dump($a, $b);
18:
19: extract($a, EXTR_REFS);
20:
21: $foo = 'noo';
22:
23: var_dump($a, $b);
24: }
25:
26: function t2()
27: {
28: $a = array('foo' => 'aaa');
29: // refcount($a) = 1
30: // refcount($a['foo']) = 1
31: $b = &$a;
32: // refcount($a) = 2
33: // is_ref($a) = true
34: // refcount($a['foo']) = 1
35: $b['foo'] = 'bbb';
36: // refcount($a) = 2
37: // refcount($a['foo']) = 1
38:
39: var_dump($a, $b);
40:
41: extract($a, EXTR_REFS);
42:
43: $foo = 'noo';
44:
45: var_dump($a, $b);
46: }
47:
48: function t3()
49: {
50: $a = array('foo' => 'aaa');
51: // refcount($a) = 1
52: // refcount($a['foo']) = 1
53: $b = &$a;
54: // refcount($a) = 2
55: // is_ref($a) = true
56: // refcount($a['foo']) = 1
57: unset($b);
58: // refcount($a) = 1
59: // is_ref($a) = true
60: // refcount($a['foo']) = 1
61:
62: var_dump($a);
63:
64: extract($a, EXTR_REFS);
65:
66: $foo = 'noo';
67:
68: var_dump($a);
69: }
70:
71: t1();
72: t2();
73: t3();
74: ?>
75: --EXPECT--
76: array(1) {
77: ["foo"]=>
78: string(3) "aaa"
79: }
80: array(1) {
81: ["foo"]=>
82: string(3) "bbb"
83: }
84: array(1) {
85: ["foo"]=>
86: &string(3) "noo"
87: }
88: array(1) {
89: ["foo"]=>
90: string(3) "bbb"
91: }
92: array(1) {
93: ["foo"]=>
94: string(3) "bbb"
95: }
96: array(1) {
97: ["foo"]=>
98: string(3) "bbb"
99: }
100: array(1) {
101: ["foo"]=>
102: &string(3) "noo"
103: }
104: array(1) {
105: ["foo"]=>
106: &string(3) "noo"
107: }
108: array(1) {
109: ["foo"]=>
110: string(3) "aaa"
111: }
112: array(1) {
113: ["foo"]=>
114: &string(3) "noo"
115: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>