]> granicus.if.org Git - php/commitdiff
Fixed bug #78239
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 3 Jul 2019 08:59:26 +0000 (10:59 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 3 Jul 2019 09:00:12 +0000 (11:00 +0200)
NEWS
Zend/tests/bug78239.phpt [new file with mode: 0644]
Zend/zend_execute_API.c

diff --git a/NEWS b/NEWS
index 99ca2e4dd4737c54467bdb82c36a3ab8c6ebea72..b57cd73929c8b30fc44c745f94605e61e4ac3749 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? ????, PHP 7.4.0alpha3
 
+- Core:
+  . Fixed bug #78239 (Deprecation notice during string conversion converted to
+    exception hangs). (Nikita)
+
 - Date:
   . Updated timelib to 2018.02. (Derick)
 
diff --git a/Zend/tests/bug78239.phpt b/Zend/tests/bug78239.phpt
new file mode 100644 (file)
index 0000000..94908a7
--- /dev/null
@@ -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
index f6f1eed26f897c10393f687a682f895d2eca2a79..a530162d50cd03a34ae931be68c1b9176f0e2e21 100644 (file)
@@ -754,6 +754,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;
                }