summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-07-08 13:56:34 +0300
committerDmitry Stogov <dmitry@zend.com>2019-07-08 13:56:34 +0300
commit9a833438d184bcc7198c609117b27a321f20d22c (patch)
tree5a95fa4ee162ed8902b4af06851a8878eb111070 /Zend/zend_API.c
parentd90cdbd9df42c3d012af23a64fb3062f0af60efa (diff)
downloadphp-git-9a833438d184bcc7198c609117b27a321f20d22c.tar.gz
Delay EG(exception) check on slow path
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index edc2ba7bc9..2e8fabfcc6 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -248,12 +248,16 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_exception(int
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(int num, zend_expected_type expected_type, zval *arg) /* {{{ */
{
const char *space;
- const char *class_name = get_active_class_name(&space);
+ const char *class_name;
static const char * const expected_error[] = {
Z_EXPECTED_TYPES(Z_EXPECTED_TYPE_STR)
NULL
};
+ if (EG(exception)) {
+ return;
+ }
+ class_name = get_active_class_name(&space);
zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), num, expected_error[expected_type], zend_zval_type_name(arg));
}
@@ -262,12 +266,16 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(int num, z
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_exception(int num, zend_expected_type expected_type, zval *arg) /* {{{ */
{
const char *space;
- const char *class_name = get_active_class_name(&space);
+ const char *class_name;
static const char * const expected_error[] = {
Z_EXPECTED_TYPES(Z_EXPECTED_TYPE_STR)
NULL
};
+ if (EG(exception)) {
+ return;
+ }
+ class_name = get_active_class_name(&space);
zend_internal_type_error(1, "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), num, expected_error[expected_type], zend_zval_type_name(arg));
}
@@ -276,8 +284,12 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_exception(int nu
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(int num, char *name, zval *arg) /* {{{ */
{
const char *space;
- const char *class_name = get_active_class_name(&space);
+ const char *class_name;
+ if (EG(exception)) {
+ return;
+ }
+ class_name = get_active_class_name(&space);
zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), num, name, zend_zval_type_name(arg));
}
@@ -286,8 +298,12 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(int num,
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_exception(int num, char *name, zval *arg) /* {{{ */
{
const char *space;
- const char *class_name = get_active_class_name(&space);
+ const char *class_name;
+ if (EG(exception)) {
+ return;
+ }
+ class_name = get_active_class_name(&space);
zend_internal_type_error(1, "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), num, name, zend_zval_type_name(arg));
}
@@ -296,8 +312,12 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_exception(int n
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int num, char *error) /* {{{ */
{
const char *space;
- const char *class_name = get_active_class_name(&space);
+ const char *class_name;
+ if (EG(exception)) {
+ return;
+ }
+ class_name = get_active_class_name(&space);
zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be a valid callback, %s",
class_name, space, get_active_function_name(), num, error);
efree(error);
@@ -307,8 +327,12 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int num, char *e
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_exception(int num, char *error) /* {{{ */
{
const char *space;
- const char *class_name = get_active_class_name(&space);
+ const char *class_name;
+ if (EG(exception)) {
+ return;
+ }
+ class_name = get_active_class_name(&space);
zend_internal_type_error(1, "%s%s%s() expects parameter %d to be a valid callback, %s",
class_name, space, get_active_function_name(), num, error);
efree(error);