summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_def.h
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_vm_def.h
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_vm_def.h')
-rw-r--r--Zend/zend_vm_def.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index a81ff958f2..39f1216958 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2106,6 +2106,11 @@ ZEND_VM_C_LABEL(fetch_obj_r_fast_copy):
}
retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
+#if ZEND_DEBUG
+ if (!EG(exception) && zobj->handlers->read_property != zend_std_read_property) {
+ zend_verify_internal_read_property_type(zobj, name, retval);
+ }
+#endif
if (OP2_TYPE != IS_CONST) {
zend_tmp_string_release(tmp_name);