xref: /PHP-5.4/Zend/tests/bug40833.phpt (revision 610c7fbe)
1--TEST--
2Bug #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--
72Bogus Bogus ok
73