Commit e9ae0406298 for php.net
commit e9ae04062986023be41798f6a31b3acfcd0a49a2
Author: arshidkv12 <arshidkv12@gmail.com>
Date: Thu Jan 29 13:51:53 2026 +0530
Fix crash on (unset) cast in constant expression
Fixes GH-21072
Closes GH-21073
diff --git a/NEWS b/NEWS
index 8ec869035f0..07c66ec833e 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP NEWS
- Core:
. Fixed bug GH-21029 (zend_mm_heap corrupted on Aarch64, LTO builds). (Arnaud)
. Fixed bug GH-21059 (Segfault when preloading constant AST closure). (ilutov)
+ . Fixed bug GH-21072 (Crash on (unset) cast in constant expression).
+ (arshidkv12)
- Windows:
. Fixed compilation with clang (missing intrin.h include). (Kévin Dunglas)
diff --git a/Zend/tests/ast/gh21072.phpt b/Zend/tests/ast/gh21072.phpt
new file mode 100644
index 00000000000..1ffd0518eae
--- /dev/null
+++ b/Zend/tests/ast/gh21072.phpt
@@ -0,0 +1,17 @@
+--TEST--
+(unset) cast must not be allowed in constant expressions
+--CREDITS--
+Viet Hoang Luu (@vi3tL0u1s)
+--FILE--
+<?php
+try {
+ class C {
+ public $p = (unset) C::class;
+ }
+ new C;
+} catch (Error $e) {
+ echo $e->getMessage();
+}
+?>
+--EXPECTF--
+Fatal error: The (unset) cast is no longer supported in %s on line %d
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 8be1ee14f48..80f85f421a3 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -12360,6 +12360,9 @@ static void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
zend_eval_const_expr(&ast->child[1]);
return;
case ZEND_AST_CAST:
+ if (ast->attr == IS_NULL) {
+ zend_error_noreturn(E_COMPILE_ERROR, "The (unset) cast is no longer supported");
+ }
zend_eval_const_expr(&ast->child[0]);
if (ast->child[0]->kind == ZEND_AST_ZVAL
&& zend_try_ct_eval_cast(&result, ast->attr, zend_ast_get_zval(ast->child[0]))) {