bug52614.phpt 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. try {
  43. $foo->f4()->a = 1;
  44. } catch (Error $e) {
  45. echo $e->getMessage(), "\n";
  46. }
  47. var_dump($foo->o1);
  48. $foo->f5()->a = 1;
  49. var_dump($foo->o2);
  50. $foo->a1[0] = 1;
  51. $foo->f7($foo->f6()[0]);
  52. var_dump($foo->a1[0]);
  53. $foo->f1()[0]++;
  54. var_dump($foo->a1[0]);
  55. $foo->f6()[0]++;
  56. var_dump($foo->a1[0]);
  57. ?>
  58. --EXPECT--
  59. NULL
  60. array(0) {
  61. }
  62. array(0) {
  63. }
  64. Attempt to assign property "a" on null
  65. NULL
  66. object(stdClass)#3 (1) {
  67. ["a"]=>
  68. int(1)
  69. }
  70. int(2)
  71. int(2)
  72. int(3)