#48408 [Opn]: Exception thrown from two functions nested in expression causes segfault

From: Date: Wed, 27 May 2009 18:23:28 +0000
Subject: #48408 [Opn]: Exception thrown from two functions nested in expression causes segfault
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-137782@lists.php.net to get a copy of this message
ID: 48408 Updated by: jani@php.net Reported By: nightstorm at tlen dot pl Status: Open Bug Type: Reproducible crash Operating System: Arch Linux 64-bit PHP Version: 5.3CVS-2009-05-27 (snap) New Comment: <?php class ABCException extends Exception {} class BBB { public function xyz($d, $x) { if($x == 34) { throw new ABCException; } return array('foo' => 'xyz'); } } class CCC { public function process($p) { return $p; } } class AAA { public function func() { $b = new BBB; $c = new CCC; $i = 34; $item = array('foo' => 'bar'); try { $c->process($b->xyz($item['foo'], $i)); } catch(ABCException $e) { $b->xyz($item['foo'], $i); } } // end func(); } class Runner { public function run($x) { try { $x->func(); } catch(ABCException $e) { throw new Exception; } } } try { $runner = new Runner; $runner->run(new AAA); } catch(Exception $e) { die('Exception thrown'); } Previous Comments: ------------------------------------------------------------------------ [2009-05-27 16:42:27] lbarnaud@php.net Looks like same as http://bugs.php.net/bug.php?id=48228 (probable compiler bug). ------------------------------------------------------------------------ [2009-05-27 16:37:06] nightstorm at tlen dot pl My PHP configuration: - The script was run in the CLI environment. - No extra patches or modifications were used. - PHP was compiled **without** debugging symbols (--enable-debug seems to "fix" the problem). - It was tested on today's snapshot of PHP 5.3. ------------------------------------------------------------------------ [2009-05-27 16:30:46] nightstorm at tlen dot pl Description: ------------ The code provided below causes segfault on today's PHP 5.3 snapshot. The same script works correctly on PHP 5.2.9. I noticed that if you comment or change the line with "#1#" comment, the segmentation fault does not occur. Reproduce code: --------------- <?php class B{ public function process($x){ return $x; } } class C{ public function generate($x){ throw new Exception; } } $b = new B; $c = new C; try{ $b->process($c->generate(0)); } catch(Exception $e){ $c->generate(0);// #1# } Expected result: ---------------- The script completes its work. Actual result: -------------- Segmentation fault: Program terminated with signal 11, Segmentation fault. [New process 17244] #0 ZEND_HANDLE_EXCEPTION_SPEC_HANDLER (execute_data=0x7f0dbdf18050) at /usr/src/php-5.3-dev/Zend/zend.h:392 392 return --pz->refcount__gc; (gdb) backtrace 5 #0 ZEND_HANDLE_EXCEPTION_SPEC_HANDLER (execute_data=0x7f0dbdf18050) at /usr/src/php-5.3-dev/Zend/zend.h:392 #1 0x0000000000741819 in execute (op_array=0x7f0dc11eacd0) at /usr/src/php-5.3-dev/Zend/zend_vm_execute.h:104 #2 0x0000000000717bf5 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/src/php-5.3-dev/Zend/zend.c:1188 #3 0x00000000006c5099 in php_execute_script (primary_file=0x7fffc936f510) at /usr/src/php-5.3-dev/main/main.c:2182 #4 0x00000000007a000e in main (argc=2, argv=0x7fffc936f778) at /usr/src/php-5.3-dev/sapi/cli/php_cli.c:1188 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48408&edit=1

« previous php.bugs (#137782) next »