Annotation of embedaddon/php/Zend/tests/object_handlers.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Magic object handlers segfaults and memory errors
3: --FILE--
4: <?php
5: function f($x) {
6: return $x;
7: }
8:
9: class foo implements ArrayAccess {
10: function __get($property) {
11: $GLOBALS["y"] = $property;
12: }
13: function __set($property, $value) {
14: $GLOBALS["y"] = $property;
15: }
16: function __call($func, $args) {
17: $GLOBALS["y"] = $func;
18: }
19: static function __callStatic($func, $args) {
20: $GLOBALS["y"] = $func;
21: }
22: function offsetGet($index) {
23: $GLOBALS["y"] = $index;
24: }
25: function offsetSet($index, $newval) {
26: $GLOBALS["y"] = $index;
27: }
28: function offsetExists($index) {
29: $GLOBALS["y"] = $index;
30: }
31: function offsetUnset($index) {
32: $GLOBALS["y"] = $index;
33: }
34: }
35:
36: $x = new foo();
37: $y = null;
38:
39: // IS_CONST
40: $z = $x->const_get;
41: echo $y,"\n";
42: $x->const_set = 1;
43: echo $y,"\n";
44: $x->const_call();
45: echo $y,"\n";
46: foo::const_callstatic();
47: echo $y,"\n";
48: $z = $x["const_dim_get"];
49: echo $y,"\n";
50: $x["const_dim_set"] = 1;
51: echo $y,"\n";
52: isset($x["const_dim_isset"]);
53: echo $y,"\n";
54: unset($x["const_dim_unset"]);
55: echo $y,"\n";
56:
57: // IS_CONST + conversion
58: $z = $x->{1};
59: echo $y,"\n";
60: $x->{2} = 1;
61: echo $y,"\n";
62:
63: // IS_TMP_VAR
64: $c = "tmp";
65: $z = $x->{$c."_get"};
66: echo $y,"\n";
67: $x->{$c."_set"} = 1;
68: echo $y,"\n";
69: $x->{$c."_call"}();
70: echo $y,"\n";
71: $z = $x[$c."_dim_get"];
72: echo $y,"\n";
73: $x[$c."_dim_set"] = 1;
74: echo $y,"\n";
75: isset($x[$c."_dim_isset"]);
76: echo $y,"\n";
77: unset($x[$c."_dim_unset"]);
78: echo $y,"\n";
79:
80: // IS_TMP_VAR + conversion
81: $c = 0;
82: $z = $x->{$c+3};
83: echo $y,"\n";
84: $x->{$c+4} = 1;
85: echo $y,"\n";
86:
87: // IS_CV
88: $c = "cv_get";
89: $z = $x->{$c};
90: echo $y,"\n";
91: $c = "cv_set";
92: $x->{$c} = 1;
93: echo $y,"\n";
94: $c = "cv_call";
95: $x->{$c}();
96: echo $y,"\n";
97: $c = "cv_dim_get";
98: $z = $x[$c];
99: echo $y,"\n";
100: $c = "cv_dim_set";
101: $x[$c] = 1;
102: echo $y,"\n";
103: $c = "cv_dim_isset";
104: isset($x[$c]);
105: echo $y,"\n";
106: $c = "cv_dim_unset";
107: unset($x[$c]);
108: echo $y,"\n";
109:
110: // IS_CV + conversion
111: $c = 5;
112: $z = $x->{$c};
113: echo $y,"\n";
114: $c = 6;
115: $x->{$c} = 1;
116: echo $y,"\n";
117:
118: // IS_VAR
119: $z = $x->{f("var_get")};
120: echo $y,"\n";
121: $x->{f("var_set")} = 1;
122: echo $y,"\n";
123: $x->{f("var_call")}();
124: echo $y,"\n";
125: $z = $x[f("var_dim_get")];
126: echo $y,"\n";
127: $x[f("var_dim_set")] = 1;
128: echo $y,"\n";
129: isset($x[f("var_dim_isset")]);
130: echo $y,"\n";
131: unset($x[f("var_dim_unset")]);
132: echo $y,"\n";
133:
134: // IS_VAR + conversion
135: $z = $x->{f(7)};
136: echo $y,"\n";
137: $x->{f(8)} = 1;
138: echo $y,"\n";
139: ?>
140: --EXPECT--
141: const_get
142: const_set
143: const_call
144: const_callstatic
145: const_dim_get
146: const_dim_set
147: const_dim_isset
148: const_dim_unset
149: 1
150: 2
151: tmp_get
152: tmp_set
153: tmp_call
154: tmp_dim_get
155: tmp_dim_set
156: tmp_dim_isset
157: tmp_dim_unset
158: 3
159: 4
160: cv_get
161: cv_set
162: cv_call
163: cv_dim_get
164: cv_dim_set
165: cv_dim_isset
166: cv_dim_unset
167: 5
168: 6
169: var_get
170: var_set
171: var_call
172: var_dim_get
173: var_dim_set
174: var_dim_isset
175: var_dim_unset
176: 7
177: 8
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>