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>