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>