From ba205f4546a0f448bb0dc3108d0ffcc7232d50f0 Mon Sep 17 00:00:00 2001 From: Jordi Kroon Date: Thu, 25 Dec 2025 23:46:30 +0100 Subject: [PATCH 1/2] fix: add "resource" to reserved class names The "resource" type keyword should be treated as a reserved class name to prevent it from being used as a class name, consistent with other built-in type keywords like "mixed", "object", and "iterable". --- Zend/zend_compile.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 5eba2ec1366fa..bee25b6e6ea92 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -215,6 +215,7 @@ static const struct reserved_class_name reserved_class_names[] = { {ZEND_STRL("iterable")}, {ZEND_STRL("object")}, {ZEND_STRL("mixed")}, + {ZEND_STRL("resource")}, /* These are not usable as class names because they're proper tokens, * but they are here for class aliases. */ {ZEND_STRL("array")}, From 2b223445b3c8865a80ba4cd1ce52d57629c54f44 Mon Sep 17 00:00:00 2001 From: Jordi Kroon Date: Thu, 25 Dec 2025 23:56:48 +0100 Subject: [PATCH 2/2] test: add test for class_alias with reserved name 'resource' Add regression test to verify that class_alias() rejects 'resource' as a class alias name since it is a reserved keyword in PHP. --- Zend/tests/class_alias/gh16665_3.phpt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Zend/tests/class_alias/gh16665_3.phpt diff --git a/Zend/tests/class_alias/gh16665_3.phpt b/Zend/tests/class_alias/gh16665_3.phpt new file mode 100644 index 0000000000000..038ab398dffb0 --- /dev/null +++ b/Zend/tests/class_alias/gh16665_3.phpt @@ -0,0 +1,8 @@ +--TEST-- +GH-16665 (\resource should not be usable) +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use "resource" as a class alias as it is reserved in %s on line %d