summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2017-04-11 18:46:16 +0800
committerXinchen Hui <laruence@gmail.com>2017-04-11 18:46:16 +0800
commiteb03f16442c7ee10842dde0140b933d2be60b84b (patch)
treeaaf411e6c4e8d00af9050392ec0ca78c8b7df37a
parentdd17659b869e44a589edc5a26e0f0bcc869597f2 (diff)
downloadphp-git-eb03f16442c7ee10842dde0140b933d2be60b84b.tar.gz
Fixed bug #74408 (Endless loop bypassing execution time limit)
-rw-r--r--NEWS3
-rw-r--r--Zend/tests/bug74408.phpt38
-rw-r--r--Zend/zend_execute_API.c9
3 files changed, 50 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index dd25136a00..889fd1d319 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2017 PHP 7.0.19
+- Core:
+ . Fixed bug #74408 (Endless loop bypassing execution time limit). (Laruence)
+
- Date:
. Fixed bug #74404 (Wrong reflection on DateTimeZone::getTransitions).
(krakjoe)
diff --git a/Zend/tests/bug74408.phpt b/Zend/tests/bug74408.phpt
new file mode 100644
index 0000000000..c0cf2f87ca
--- /dev/null
+++ b/Zend/tests/bug74408.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Bug #74408 (Endless loop bypassing execution time limit)
+--INI--
+error_reporting = E_ALL | E_DEPRECATED | E_STRICT
+--FILE--
+<?php
+
+ //php.ini: error_reporting = E_ALL | E_DEPRECATED | E_STRICT
+
+ class ErrorHandling {
+
+ public function error_handler($errno, $errstr, $errfile, $errline) {
+ $bla = new NonExistingClass2();
+ }
+
+ public function exception_handler(Error $e) {
+ echo "Caught, exception: " . $e->getMessage();
+ }
+ }
+
+ set_error_handler('ErrorHandling::error_handler');
+ set_exception_handler('ErrorHandling::exception_handler');
+
+ $blubb = new NonExistingClass();
+?>
+--EXPECTF--
+Deprecated: Non-static method ErrorHandling::error_handler() should not be called statically in %sbug74408.php on line %d
+
+Deprecated: Non-static method ErrorHandling::error_handler() should not be called statically in %sbug74408.php on line %d
+
+Deprecated: Non-static method ErrorHandling::error_handler() should not be called statically in Unknown on line 0
+
+Fatal error: Uncaught Error: Class 'NonExistingClass2' not found in %sbug74408.php:%d
+Stack trace:
+#0 [internal function]: ErrorHandling::error_handler(8192, 'Non-static meth...', '%s', %d, Array)
+#1 %sbug74408.php(%d): set_exception_handler('ErrorHandling::...')
+#2 {main}
+ thrown in %sbug74408.php on line %d
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 28a75b7190..ff2d22f1d4 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -755,6 +755,15 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
}
zend_error(E_DEPRECATED, "%s", error);
efree(error);
+ if (UNEXPECTED(EG(exception))) {
+ if (callable_name) {
+ zend_string_release(callable_name);
+ }
+ if (EG(current_execute_data) == &dummy_execute_data) {
+ EG(current_execute_data) = dummy_execute_data.prev_execute_data;
+ }
+ return FAILURE;
+ }
}
zend_string_release(callable_name);
}