bug52614.phpt 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. --TEST--
  2. Bug #52614 (Memory leak when writing on uninitialized variable returned from method call)
  3. --FILE--
  4. <?php
  5. class foo {
  6. public $a1;
  7. public $a2 = array();
  8. public $a3;
  9. public $o1;
  10. public $o2;
  11. public function f1() {
  12. return $this->a1;
  13. }
  14. public function f2() {
  15. return $this->a2;
  16. }
  17. public function f3() {
  18. $this->a3 = array();
  19. return $this->a3;
  20. }
  21. public function f4() {
  22. return $this->o1;
  23. }
  24. public function f5() {
  25. $this->o2 = new stdClass;
  26. return $this->o2;
  27. }
  28. public function &f6() {
  29. return $this->a1;
  30. }
  31. public function f7(&$x) {
  32. $x = 2;
  33. }
  34. }
  35. $foo = new foo;
  36. $foo->f1()[0] = 1;
  37. var_dump($foo->a1);
  38. $foo->f2()[0] = 1;
  39. var_dump($foo->a2);
  40. $foo->f3()[0] = 1;
  41. var_dump($foo->a3);
  42. $foo->f4()->a = 1;
  43. var_dump($foo->o1);
  44. $foo->f5()->a = 1;
  45. var_dump($foo->o2);
  46. $foo->a1[0] = 1;
  47. $foo->f7($foo->f6()[0]);
  48. var_dump($foo->a1[0]);
  49. $foo->f1()[0]++;
  50. var_dump($foo->a1[0]);
  51. $foo->f6()[0]++;
  52. var_dump($foo->a1[0]);
  53. --EXPECTF--
  54. NULL
  55. array(0) {
  56. }
  57. array(0) {
  58. }
  59. Warning: Creating default object from empty value in %sbug52614.php on line 52
  60. NULL
  61. object(stdClass)#%d (1) {
  62. ["a"]=>
  63. int(1)
  64. }
  65. int(2)
  66. int(2)
  67. int(3)