summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-03-16 10:38:04 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-03-16 10:42:47 +0100
commit53e9c36cd94fae193a4fcbb879b93db31a4906c3 (patch)
tree83a6f10810e1b2de2c767018397b1b15d42b2d2a /Zend/zend_execute.c
parentaad283e9f33d892b77e375610fb6be32e1a10ddd (diff)
downloadphp-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.c9
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)