From 5295e368b4332d87f83f7ca2a20331115fd6e227 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 28 Apr 2021 14:55:37 +0200 Subject: [PATCH] Filter return value of ReflectionClassConstant::getModifiers() Don't return internal flags like IS_CASE. --- ext/reflection/php_reflection.c | 2 +- .../tests/ReflectionEnumUnitCase_construct.phpt | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 232b477ab8d..048fd3e59c9 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -3702,7 +3702,7 @@ ZEND_METHOD(ReflectionClassConstant, getModifiers) } GET_REFLECTION_OBJECT_PTR(ref); - RETURN_LONG(ZEND_CLASS_CONST_FLAGS(ref)); + RETURN_LONG(ZEND_CLASS_CONST_FLAGS(ref) & ZEND_ACC_PPP_MASK); } /* }}} */ diff --git a/ext/reflection/tests/ReflectionEnumUnitCase_construct.phpt b/ext/reflection/tests/ReflectionEnumUnitCase_construct.phpt index de5af5c549c..18ab0222eb5 100644 --- a/ext/reflection/tests/ReflectionEnumUnitCase_construct.phpt +++ b/ext/reflection/tests/ReflectionEnumUnitCase_construct.phpt @@ -8,7 +8,10 @@ enum Foo { const Baz = self::Bar; } -echo (new ReflectionEnumUnitCase(Foo::class, 'Bar'))->getName() . "\n"; +$case = new ReflectionEnumUnitCase(Foo::class, 'Bar'); +var_dump($case->getName()); +var_dump($case->isPublic()); +var_dump($case->getModifiers()); try { new ReflectionEnumUnitCase(Foo::class, 'Baz'); @@ -30,7 +33,9 @@ try { ?> --EXPECT-- -Bar +string(3) "Bar" +bool(true) +int(1) Constant Foo::Baz is not a case Constant Foo::Qux does not exist ReflectionEnumUnitCase::__construct(): Argument #1 ($class) must be of type object|string, array given