diff options
author | Xinchen Hui <laruence@gmail.com> | 2018-06-28 12:37:58 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2018-06-28 12:37:58 +0800 |
commit | 5d7f9dcca77194fb113366adc655ce174a4bd43c (patch) | |
tree | 894026395660baf5547f63bc3a9f4f98c2ca8584 | |
parent | 7b98d056d3958cc3fcf763c171ca2e1e8724b59a (diff) | |
parent | 1f6b842af430b8cbba0fb1c38a2796ab399171c3 (diff) | |
download | php-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.c | 2 | ||||
-rw-r--r-- | ext/reflection/tests/bug76536.phpt | 20 |
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 |