ID: 43175
Updated by: [EMAIL PROTECTED]
Reported By: development at domain51 dot com
Status: Verified
-Bug Type: *General Issues
+Bug Type: Scripting Engine problem
Operating System: *
PHP Version: 5CVS,6CVS (2007-11-01)
New Comment:
Simplest script to reproduce:
<?php
class foobar {
public function __destruct() {
throw new Exception();
}
public function __call($m, $a) {
return $this;
}
public static function factory() {
return new foobar();
}
}
function foobar() {
return new foobar();
}
try {
foobar::factory()->unknown();
} catch (Exception $e) {
echo "__call via traditional factory should be caught\n";
}
?>
Program received signal SIGSEGV, Segmentation fault.
0x082fe66d in add_assoc_string_ex (arg=0x95f0484, key=0x85d8db2
"function", key_len=9, str=0x7 <Address 0x7 out of bounds>,
duplicate=1)
at /home/jani/src/php-5.3/Zend/zend_API.c:1147
1147 ZVAL_STRING(tmp, str, duplicate);
(gdb) bt
#0 0x082fe66d in add_assoc_string_ex (arg=0x95f0484, key=0x85d8db2
"function", key_len=9, str=0x7 <Address 0x7 out of bounds>,
duplicate=1)
at /home/jani/src/php-5.3/Zend/zend_API.c:1147
#1 0x08310cb1 in zend_fetch_debug_backtrace (return_value=0x95f21a4,
skip_last=-1, provide_object=0)
at /home/jani/src/php-5.3/Zend/zend_builtin_functions.c:2026
.
.
Previous Comments:
------------------------------------------------------------------------
[2007-11-01 17:17:41] [EMAIL PROTECTED]
I noticed you try to throw in destructor and that's not supposed to
work. See page: http://docs.php.net/manual/en/language.oop5.decon.php
"Note: Attempting to throw an exception from a destructor (called in
the time of script termination) causes a fatal error. "
Of course it shouldn't cause any crash though. :)
------------------------------------------------------------------------
[2007-11-01 15:27:51] development at domain51 dot com
Description:
------------
If __destruct() throws an exception on an object that was not assigned
to a variable, but had __call() invoked, it will segfault
Reproduce code:
---------------
Full test case available at:
http://plumb.domain51.com/sandbox/__destruct-bug/bug.phpt
http://plumb.domain51.com/sandbox/__destruct-bug/bug.phps (syntax
highlighted)
Simplified sample:
foobar::factory()>unknown();
foobar()->unknown(); // where foobar is a function wrapping new foobar
Expected result:
----------------
Exception to be thrown in foobar::__destruct()
Actual result:
--------------
Segfault on Linux
Bus error on Mac OSX
I'll get a backtrace added later as time allows
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=43175&edit=1