File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / Zend / tests / bug40833.phpt
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:47:52 2012 UTC (13 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, v5_3_10, HEAD
php

    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>