summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2018-06-28 12:37:58 +0800
committerXinchen Hui <laruence@gmail.com>2018-06-28 12:37:58 +0800
commit5d7f9dcca77194fb113366adc655ce174a4bd43c (patch)
tree894026395660baf5547f63bc3a9f4f98c2ca8584
parent7b98d056d3958cc3fcf763c171ca2e1e8724b59a (diff)
parent1f6b842af430b8cbba0fb1c38a2796ab399171c3 (diff)
downloadphp-git-5d7f9dcca77194fb113366adc655ce174a4bd43c.tar.gz
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fixed bug #76536 (PHP crashes with core dump when throwing exception in error handler). (Laruence)
-rw-r--r--ext/reflection/php_reflection.c2
-rw-r--r--ext/reflection/tests/bug76536.phpt20
2 files changed, 21 insertions, 1 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 991f0da341..9128f76d9d 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -4496,7 +4496,7 @@ ZEND_METHOD(reflection_class, getConstants)
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->constants_table, key, c) {
if (UNEXPECTED(zval_update_constant_ex(&c->value, ce) != SUCCESS)) {
zend_array_destroy(Z_ARRVAL_P(return_value));
- return;
+ RETURN_NULL();
}
val = zend_hash_add_new(Z_ARRVAL_P(return_value), key, &c->value);
Z_TRY_ADDREF_P(val);
diff --git a/ext/reflection/tests/bug76536.phpt b/ext/reflection/tests/bug76536.phpt
new file mode 100644
index 0000000000..9f3b3fdb31
--- /dev/null
+++ b/ext/reflection/tests/bug76536.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #76536 (PHP crashes with core dump when throwing exception in error handler)
+--FILE--
+<?php
+class SomeConstants {const SOME_CONSTANT = SOME_NONSENSE;}
+
+function handleError() {throw new ErrorException();}
+
+set_error_handler('handleError');
+set_exception_handler('handleError');
+
+$r = new \ReflectionClass(SomeConstants::class);
+$r->getConstants();
+?>
+--EXPECTF--
+Fatal error: Uncaught ErrorException in %sbug76536.php:%d
+Stack trace:
+#0 [internal function]: handleError(Object(ErrorException))
+#1 {main}
+ thrown in %sbug76536.php on line %d