From e2cc79e803800085b950ea7ab96411c1b3dae976 Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Fri, 30 Oct 2026 20:14:49 +0100 Subject: [PATCH 1/2] Fix AST printing of interface extends list as implements --- NEWS | 3 +++ .../assert/expect_interface_extends.phpt | 22 +++++++++++++++++++ Zend/zend_ast.c | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/assert/expect_interface_extends.phpt diff --git a/NEWS b/NEWS index f42114aa9912..b97b013a2139 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.4.29 +- Core: + . Fixed AST printing of interface extends list as implements. (Jorg Sowa) + - Curl: . Fixed curl_reset() retaining CURLOPT_PRIVATE after reset. (lacatoire) diff --git a/Zend/tests/assert/expect_interface_extends.phpt b/Zend/tests/assert/expect_interface_extends.phpt new file mode 100644 index 000000000000..61775ffb9c21 --- /dev/null +++ b/Zend/tests/assert/expect_interface_extends.phpt @@ -0,0 +1,22 @@ +--TEST-- +AST printing of interface extends list +--INI-- +zend.assertions=1 +--FILE-- +getMessage(), "\n"; +} + +?> +--EXPECT-- +assert(false && function () { + interface I extends A, B { + } + +}) diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index e0606dbb0419..fdcb46ec7173 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -1669,7 +1669,7 @@ static ZEND_COLD void zend_ast_export_class_no_header(smart_str *str, zend_ast_d zend_ast_export_ns_name(str, decl->child[0], 0, indent); } if (decl->child[1]) { - smart_str_appends(str, " implements "); + smart_str_appends(str, decl->flags & ZEND_ACC_INTERFACE ? " extends " : " implements "); zend_ast_export_ex(str, decl->child[1], 0, indent); } smart_str_appends(str, " {\n"); From 211c424cd31397c8673b64fb4ef3edad41161e2d Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Wed, 4 Nov 2026 17:14:50 +0100 Subject: [PATCH 2/2] Parenthesize flag check in interface extends export --- Zend/zend_ast.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index fdcb46ec7173..eec705588a13 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -1669,7 +1669,7 @@ static ZEND_COLD void zend_ast_export_class_no_header(smart_str *str, zend_ast_d zend_ast_export_ns_name(str, decl->child[0], 0, indent); } if (decl->child[1]) { - smart_str_appends(str, decl->flags & ZEND_ACC_INTERFACE ? " extends " : " implements "); + smart_str_appends(str, (decl->flags & ZEND_ACC_INTERFACE) ? " extends " : " implements "); zend_ast_export_ex(str, decl->child[1], 0, indent); } smart_str_appends(str, " {\n");