From e30c050b81223df97382c161691393d8ee05dd5d Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Thu, 2 Dec 2021 19:05:34 +0100 Subject: [PATCH] Fix #81681: ReflectionEnum throwing exceptions Enums are neither instantiable nor cloneable. --- ext/reflection/php_reflection.c | 4 ++-- ext/reflection/tests/bug81681.phpt | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 ext/reflection/tests/bug81681.phpt diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 2134d9aa72f2f..d2d84bf0af1e6 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4751,7 +4751,7 @@ ZEND_METHOD(ReflectionClass, isInstantiable) RETURN_THROWS(); } GET_REFLECTION_OBJECT_PTR(ce); - if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS)) { + if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS | ZEND_ACC_ENUM)) { RETURN_FALSE; } @@ -4776,7 +4776,7 @@ ZEND_METHOD(ReflectionClass, isCloneable) RETURN_THROWS(); } GET_REFLECTION_OBJECT_PTR(ce); - if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS)) { + if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS | ZEND_ACC_ENUM)) { RETURN_FALSE; } if (!Z_ISUNDEF(intern->obj)) { diff --git a/ext/reflection/tests/bug81681.phpt b/ext/reflection/tests/bug81681.phpt new file mode 100644 index 0000000000000..6b1c2278163e6 --- /dev/null +++ b/ext/reflection/tests/bug81681.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #81681 (ReflectionEnum throwing exceptions) +--FILE-- +isInstantiable()); +var_dump($reflectionEnum->isCloneable()); +?> +--EXPECT-- +bool(false) +bool(false)