diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-03-16 10:38:04 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-03-16 10:42:47 +0100 |
commit | 53e9c36cd94fae193a4fcbb879b93db31a4906c3 (patch) | |
tree | 83a6f10810e1b2de2c767018397b1b15d42b2d2a /Zend/zend_execute.c | |
parent | aad283e9f33d892b77e375610fb6be32e1a10ddd (diff) | |
download | php-git-53e9c36cd94fae193a4fcbb879b93db31a4906c3.tar.gz |
Add sanity check for type of read_property return value
If an internal class overrides read_property and declared property
types, make sure that the returned value matches the declared
type (in debug builds).
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 11a140e845..bfafff9e35 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1189,6 +1189,15 @@ static ZEND_COLD void zend_internal_call_arginfo_violation(zend_function *fbc) fbc->common.scope ? "::" : "", ZSTR_VAL(fbc->common.function_name)); } + +static void zend_verify_internal_read_property_type(zend_object *obj, zend_string *name, zval *val) +{ + zend_property_info *prop_info = + zend_get_property_info(obj->ce, name, /* silent */ true); + if (prop_info && ZEND_TYPE_IS_SET(prop_info->type)) { + zend_verify_property_type(prop_info, val, /* strict */ true); + } +} #endif ZEND_API ZEND_COLD void ZEND_FASTCALL zend_missing_arg_error(zend_execute_data *execute_data) |