summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/bug78239.phpt30
-rw-r--r--Zend/zend_execute_API.c1
2 files changed, 31 insertions, 0 deletions
diff --git a/Zend/tests/bug78239.phpt b/Zend/tests/bug78239.phpt
new file mode 100644
index 0000000000..94908a785b
--- /dev/null
+++ b/Zend/tests/bug78239.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #78239: Deprecation notice during string conversion converted to exception hangs
+--FILE--
+<?php
+function handleError($level, $message, $file = '', $line = 0, $context = [])
+{
+ throw new ErrorException($message, 0, $level, $file, $line);
+}
+
+set_error_handler('handleError');
+
+class A
+{
+
+ public function abc(): bool
+ {
+ return false;
+ }
+}
+
+$r = new ReflectionMethod("A", "abc");
+(string)$r->getReturnType() ?: "";
+
+?>
+--EXPECTF--
+Fatal error: Uncaught ErrorException: Function ReflectionType::__toString() is deprecated in %s:%d
+Stack trace:
+#0 %s(%d): handleError(%s)
+#1 {main}
+ thrown in %s on line %d
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 1bd462712d..a3dfac39a6 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -722,6 +722,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
zend_vm_stack_free_call_frame(call);
if (EG(current_execute_data) == &dummy_execute_data) {
EG(current_execute_data) = dummy_execute_data.prev_execute_data;
+ zend_rethrow_exception(EG(current_execute_data));
}
return FAILURE;
}