Annotation of embedaddon/php/Zend/tests/bug40833.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: Bug #40833 (Crash when using unset() on an ArrayAccess object retrieved via __get) 
        !             3: --FILE--
        !             4: <?php
        !             5:        class entity
        !             6:        {
        !             7:                private $data;
        !             8:                private $modified;
        !             9: 
        !            10:                function __get($name)
        !            11:                {
        !            12:                        if ( isset($this->data[$name]) )
        !            13:                                return $this->data[$name];
        !            14:                        else
        !            15:                                return $this->data[$name] = new set($this);
        !            16:                }
        !            17: 
        !            18:                function __set($name, $value)
        !            19:                {
        !            20:                        $this->modified[$name] = $value;
        !            21:                }
        !            22:        }
        !            23: 
        !            24:        class set implements ArrayAccess
        !            25:        {
        !            26:                private $entity;
        !            27: 
        !            28:                function __construct($entity)
        !            29:                {
        !            30:                        $this->entity = $entity;
        !            31:                        $this->entity->whatever = $this;
        !            32:                }
        !            33: 
        !            34:                function clear() {
        !            35:                        $this->entity->whatever = null;
        !            36:                }
        !            37: 
        !            38:                function offsetUnset($offset)
        !            39:                {
        !            40:                        $this->clear();
        !            41: //                     $this->entity->{$this->name} = null;
        !            42:                }
        !            43: 
        !            44:                function offsetSet($offset, $value)
        !            45:                {
        !            46:                }
        !            47: 
        !            48:                function offsetGet($offset)
        !            49:                {
        !            50:                        return 'Bogus ';
        !            51:                }
        !            52: 
        !            53:                function offsetExists($offset)
        !            54:                {
        !            55:                }
        !            56:        }
        !            57: 
        !            58:        $entity = new entity();
        !            59:        echo($entity->whatever[0]);
        !            60: 
        !            61:        //This will crash
        !            62: //     $entity->whatever->clear();
        !            63:        unset($entity->whatever[0]);
        !            64: 
        !            65:        //This will not crash (comment previous & uncomment this to test
        !            66: //     $test = $entity->whatever; unset($test[0]);
        !            67: 
        !            68:        echo($entity->whatever[0]);
        !            69:        echo "ok\n";
        !            70: ?>
        !            71: --EXPECT--
        !            72: Bogus Bogus ok

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>