Fix GH-16181: phpdbg: exit in exception handler reports fatal error

When running PHP code, we must not handle `UnwindExit` exceptions, but
rather have to ignore them.

Closes GH-16182.
This commit is contained in:
Christoph M. Becker 2024-10-03 00:44:16 +02:00
parent 2bcf3f9e23
commit f14e5cfaaa
No known key found for this signature in database
GPG Key ID: D66C9593118BCCB6
3 changed files with 29 additions and 1 deletions

2
NEWS
View File

@ -39,6 +39,8 @@ PHP NEWS
- PHPDBG:
. Fixed bug GH-15901 (phpdbg: Assertion failure on i funcs). (cmb)
. Fixed bug GH-16181 (phpdbg: exit in exception handler reports fatal error).
(cmb)
- SimpleXML:
. Fixed bug GH-15837 (Segmentation fault in ext/simplexml/simplexml.c).

View File

@ -907,7 +907,7 @@ free_cmd:
}
} zend_end_try();
if (EG(exception)) {
if (EG(exception) && !zend_is_unwind_exit(EG(exception))) {
phpdbg_handle_exception();
}
}

View File

@ -0,0 +1,26 @@
--TEST--
GH-16181 (phpdbg: exit in exception handler reports fatal error)
--PHPDBG--
r
c
q
--FILE--
<?php
set_exception_handler(function() {
echo "exception caught\n";
die;
});
echo "throwing exception\n";
throw new \Exception("oh noes");
?>
--EXPECTF--
[Successful compilation of %s]
prompt> throwing exception
[Uncaught Exception in %s on line %d: oh noes]
>00008: throw new \Exception("oh noes");
00009: ?>
00010:
prompt> exception caught
[Script ended normally]
prompt>