diff options
Diffstat (limited to 'Zend/tests/bug52614.phpt')
-rw-r--r-- | Zend/tests/bug52614.phpt | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/Zend/tests/bug52614.phpt b/Zend/tests/bug52614.phpt new file mode 100644 index 0000000000..d220881679 --- /dev/null +++ b/Zend/tests/bug52614.phpt @@ -0,0 +1,83 @@ +--TEST-- +Bug #52614 (Memory leak when writing on uninitialized variable returned from method call) +--FILE-- +<?php +class foo { + public $a1; + public $a2 = array(); + public $a3; + public $o1; + public $o2; + + public function f1() { + return $this->a1; + } + + public function f2() { + return $this->a2; + } + + public function f3() { + $this->a3 = array(); + return $this->a3; + } + + public function f4() { + return $this->o1; + } + + public function f5() { + $this->o2 = new stdClass; + return $this->o2; + } + + public function &f6() { + return $this->a1; + } + + public function f7(&$x) { + $x = 2; + } + +} + +$foo = new foo; + +$foo->f1()[0] = 1; +var_dump($foo->a1); + +$foo->f2()[0] = 1; +var_dump($foo->a2); + +$foo->f3()[0] = 1; +var_dump($foo->a3); + +$foo->f4()->a = 1; +var_dump($foo->o1); + +$foo->f5()->a = 1; +var_dump($foo->o2); + +$foo->a1[0] = 1; +$foo->f7($foo->f6()[0]); +var_dump($foo->a1[0]); +$foo->f1()[0]++; +var_dump($foo->a1[0]); +$foo->f6()[0]++; +var_dump($foo->a1[0]); +--EXPECTF-- +NULL +array(0) { +} +array(0) { +} + +Warning: Creating default object from empty value in %sbug52614.php on line 52 +NULL +object(stdClass)#%d (1) { + ["a"]=> + int(1) +} +int(2) +int(2) +int(3) |