[Bug 577710] Re: php5 crashed with SIGSEGV in execute()
Clint Byrum
clint at fewbar.com
Tue Sep 14 01:28:43 BST 2010
Vladimir, thanks very much for this bug report!
I believe this is essentially infinite recursion caused by the way PHP
resolves methods..
the test case basically does this
create a new Test_PHP5 object, named $this
call $this->__construct()
$this->__construct calls parent::Test(), which leaves $this as a Test_PHP5, and maps to Test::Test()
Test::Test() calls $this->__construct(), which is mapped to Test_PHP5::__construct()
$this->__construct() calls parent::Test() which maps to Test::Test()
... infinite recursion
This would cause issues with any PHP interpreter. On Maverick though,
this is the result:
PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in /home/clint/test.php on line 7
PHP Stack trace:
PHP 1. {main}() /home/clint/test.php:0
PHP 2. Test_PHP5->__construct() /home/clint/test.php:26
PHP 3. Test->Test() /home/clint/test.php:22
PHP 4. Test_PHP5->__construct() /home/clint/test.php:7
PHP 5. Test->Test() /home/clint/test.php:22
PHP 6. Test_PHP5->__construct() /home/clint/test.php:7
PHP 7. Test->Test() /home/clint/test.php:22
PHP 8. Test_PHP5->__construct() /home/clint/test.php:7
PHP 9. Test->Test() /home/clint/test.php:22
PHP 10. Test_PHP5->__construct() /home/clint/test.php:7
PHP 11. Test->Test() /home/clint/test.php:22
PHP 12. Test_PHP5->__construct() /home/clint/test.php:7
PHP 13. Test->Test() /home/clint/test.php:22
PHP 14. Test_PHP5->__construct() /home/clint/test.php:7
PHP 15. Test->Test() /home/clint/test.php:22
PHP 16. Test_PHP5->__construct() /home/clint/test.php:7
PHP 17. Test->Test() /home/clint/test.php:22
PHP 18. Test_PHP5->__construct() /home/clint/test.php:7
PHP 19. Test->Test() /home/clint/test.php:22
PHP 20. Test_PHP5->__construct() /home/clint/test.php:7
PHP 21. Test->Test() /home/clint/test.php:22
PHP 22. Test_PHP5->__construct() /home/clint/test.php:7
PHP 23. Test->Test() /home/clint/test.php:22
PHP 24. Test_PHP5->__construct() /home/clint/test.php:7
PHP 25. Test->Test() /home/clint/test.php:22
PHP 26. Test_PHP5->__construct() /home/clint/test.php:7
PHP 27. Test->Test() /home/clint/test.php:22
PHP 28. Test_PHP5->__construct() /home/clint/test.php:7
PHP 29. Test->Test() /home/clint/test.php:22
PHP 30. Test_PHP5->__construct() /home/clint/test.php:7
PHP 31. Test->Test() /home/clint/test.php:22
PHP 32. Test_PHP5->__construct() /home/clint/test.php:7
PHP 33. Test->Test() /home/clint/test.php:22
PHP 34. Test_PHP5->__construct() /home/clint/test.php:7
PHP 35. Test->Test() /home/clint/test.php:22
PHP 36. Test_PHP5->__construct() /home/clint/test.php:7
PHP 37. Test->Test() /home/clint/test.php:22
PHP 38. Test_PHP5->__construct() /home/clint/test.php:7
PHP 39. Test->Test() /home/clint/test.php:22
PHP 40. Test_PHP5->__construct() /home/clint/test.php:7
PHP 41. Test->Test() /home/clint/test.php:22
PHP 42. Test_PHP5->__construct() /home/clint/test.php:7
PHP 43. Test->Test() /home/clint/test.php:22
PHP 44. Test_PHP5->__construct() /home/clint/test.php:7
PHP 45. Test->Test() /home/clint/test.php:22
PHP 46. Test_PHP5->__construct() /home/clint/test.php:7
PHP 47. Test->Test() /home/clint/test.php:22
PHP 48. Test_PHP5->__construct() /home/clint/test.php:7
PHP 49. Test->Test() /home/clint/test.php:22
PHP 50. Test_PHP5->__construct() /home/clint/test.php:7
PHP 51. Test->Test() /home/clint/test.php:22
PHP 52. Test_PHP5->__construct() /home/clint/test.php:7
PHP 53. Test->Test() /home/clint/test.php:22
PHP 54. Test_PHP5->__construct() /home/clint/test.php:7
PHP 55. Test->Test() /home/clint/test.php:22
PHP 56. Test_PHP5->__construct() /home/clint/test.php:7
PHP 57. Test->Test() /home/clint/test.php:22
PHP 58. Test_PHP5->__construct() /home/clint/test.php:7
PHP 59. Test->Test() /home/clint/test.php:22
PHP 60. Test_PHP5->__construct() /home/clint/test.php:7
PHP 61. Test->Test() /home/clint/test.php:22
PHP 62. Test_PHP5->__construct() /home/clint/test.php:7
PHP 63. Test->Test() /home/clint/test.php:22
PHP 64. Test_PHP5->__construct() /home/clint/test.php:7
PHP 65. Test->Test() /home/clint/test.php:22
PHP 66. Test_PHP5->__construct() /home/clint/test.php:7
PHP 67. Test->Test() /home/clint/test.php:22
PHP 68. Test_PHP5->__construct() /home/clint/test.php:7
PHP 69. Test->Test() /home/clint/test.php:22
PHP 70. Test_PHP5->__construct() /home/clint/test.php:7
PHP 71. Test->Test() /home/clint/test.php:22
PHP 72. Test_PHP5->__construct() /home/clint/test.php:7
PHP 73. Test->Test() /home/clint/test.php:22
PHP 74. Test_PHP5->__construct() /home/clint/test.php:7
PHP 75. Test->Test() /home/clint/test.php:22
PHP 76. Test_PHP5->__construct() /home/clint/test.php:7
PHP 77. Test->Test() /home/clint/test.php:22
PHP 78. Test_PHP5->__construct() /home/clint/test.php:7
PHP 79. Test->Test() /home/clint/test.php:22
PHP 80. Test_PHP5->__construct() /home/clint/test.php:7
PHP 81. Test->Test() /home/clint/test.php:22
PHP 82. Test_PHP5->__construct() /home/clint/test.php:7
PHP 83. Test->Test() /home/clint/test.php:22
PHP 84. Test_PHP5->__construct() /home/clint/test.php:7
PHP 85. Test->Test() /home/clint/test.php:22
PHP 86. Test_PHP5->__construct() /home/clint/test.php:7
PHP 87. Test->Test() /home/clint/test.php:22
PHP 88. Test_PHP5->__construct() /home/clint/test.php:7
PHP 89. Test->Test() /home/clint/test.php:22
PHP 90. Test_PHP5->__construct() /home/clint/test.php:7
PHP 91. Test->Test() /home/clint/test.php:22
PHP 92. Test_PHP5->__construct() /home/clint/test.php:7
PHP 93. Test->Test() /home/clint/test.php:22
PHP 94. Test_PHP5->__construct() /home/clint/test.php:7
PHP 95. Test->Test() /home/clint/test.php:22
PHP 96. Test_PHP5->__construct() /home/clint/test.php:7
PHP 97. Test->Test() /home/clint/test.php:22
PHP 98. Test_PHP5->__construct() /home/clint/test.php:7
PHP 99. Test->Test() /home/clint/test.php:22
As you can see, Test::__construct() is never called.
When I run your test script on lucid with the latest updates, it
actually just sits there and doesn't return anything, nor does it
segfault.
As far as I know, you can't really access overriden methods from the
parent itself, you have to call parent::methodname from the overriding
method to get to that old code. Given the situation above, the right way
to solve this problem is not to call parent::Test(), but
parent::__construct().
I'm going to close this report as invalid, but please feel free to re-
open it (set it to New) if you feel that I have misunderstood the intent
of the test case or if you have a different test case that shows the
crash without overloading the stack.
** Changed in: php5 (Ubuntu)
Status: Triaged => Invalid
--
php5 crashed with SIGSEGV in execute()
https://bugs.launchpad.net/bugs/577710
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to php5 in ubuntu.
More information about the Ubuntu-server-bugs
mailing list