From da35fa2cb8d454c8e797067e28e647030a5fe5df Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 22 Mar 2019 12:39:27 +0100 Subject: [PATCH] Fixed bug #77772 --- NEWS | 3 +++ ext/reflection/php_reflection.c | 26 ++++++++++++-------------- ext/reflection/tests/bug77772.phpt | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 ext/reflection/tests/bug77772.phpt diff --git a/NEWS b/NEWS index e35e2d405e..dbce1af299 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2019, PHP 7.2.18 +- Reflection: + . Fixed bug #77772 (ReflectionClass::getMethods(null) doesn't work). (Nikita) + 04 Apr 2019, PHP 7.2.17 - Core: diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index f1096fbe81..80e508c175 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4246,15 +4246,14 @@ ZEND_METHOD(reflection_class, getMethods) reflection_object *intern; zend_class_entry *ce; zend_long filter = 0; - int argc = ZEND_NUM_ARGS(); + zend_bool filter_is_null = 1; METHOD_NOTSTATIC(reflection_class_ptr); - if (argc) { - if (zend_parse_parameters(argc, "|l", &filter) == FAILURE) { - return; - } - } else { - /* No parameters given, default to "return all" */ + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!", &filter, &filter_is_null) == FAILURE) { + return; + } + + if (filter_is_null) { filter = ZEND_ACC_PPP_MASK | ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL | ZEND_ACC_STATIC; } @@ -4442,15 +4441,14 @@ ZEND_METHOD(reflection_class, getProperties) reflection_object *intern; zend_class_entry *ce; zend_long filter = 0; - int argc = ZEND_NUM_ARGS(); + zend_bool filter_is_null = 1; METHOD_NOTSTATIC(reflection_class_ptr); - if (argc) { - if (zend_parse_parameters(argc, "|l", &filter) == FAILURE) { - return; - } - } else { - /* No parameters given, default to "return all" */ + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!", &filter, &filter_is_null) == FAILURE) { + return; + } + + if (filter_is_null) { filter = ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC; } diff --git a/ext/reflection/tests/bug77772.phpt b/ext/reflection/tests/bug77772.phpt new file mode 100644 index 0000000000..07696210c5 --- /dev/null +++ b/ext/reflection/tests/bug77772.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #77772: ReflectionClass::getMethods(null) doesn't work +--FILE-- +getMethods(null) as $method) { + var_dump($method->getName()); +} +foreach ($rc->getProperties(null) as $prop) { + var_dump($prop->getName()); +} + +?> +--EXPECT-- +string(6) "method" +string(4) "prop" -- 2.40.0