diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-02-10 11:05:26 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-02-10 11:05:26 +0100 |
commit | 42fbc76d9cee94241e56c82a8550ee6221d0f239 (patch) | |
tree | 8609d3a2538dd70893e5d8902bab91fbe8df97ff /ext/reflection/php_reflection.c | |
parent | 87f127d8fa7b03e8f32962fc720da5df1a505fa5 (diff) | |
download | php-git-42fbc76d9cee94241e56c82a8550ee6221d0f239.tar.gz |
Always invoke zpp in ReflectionProperty::getValue/isInitialized
Make sure we still perform a zpp check for the static case, and
also always enforce that the parameter is ?object. Otherwise we
violate the specified signature.
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r-- | ext/reflection/php_reflection.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 6fb415f2ad..95c4859e94 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -5467,9 +5467,13 @@ ZEND_METHOD(reflection_property, getValue) { reflection_object *intern; property_reference *ref; - zval *object, *name; + zval *object = NULL, *name; zval *member_p = NULL; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &object) == FAILURE) { + RETURN_THROWS(); + } + GET_REFLECTION_OBJECT_PTR(ref); if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) { @@ -5487,7 +5491,8 @@ ZEND_METHOD(reflection_property, getValue) } else { zval rv; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &object) == FAILURE) { + if (!object) { + zend_type_error("No object provided for getValue() on instance property"); RETURN_THROWS(); } @@ -5553,9 +5558,13 @@ ZEND_METHOD(reflection_property, isInitialized) { reflection_object *intern; property_reference *ref; - zval *object, *name; + zval *object = NULL, *name; zval *member_p = NULL; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &object) == FAILURE) { + RETURN_THROWS(); + } + GET_REFLECTION_OBJECT_PTR(ref); if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) { @@ -5575,7 +5584,8 @@ ZEND_METHOD(reflection_property, isInitialized) zend_class_entry *old_scope; int retval; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &object) == FAILURE) { + if (!object) { + zend_type_error("No object provided for isInitialized() on instance property"); RETURN_THROWS(); } |