From 65d70a6b6afcd141f2d9c493840bfdeb2a607b9d Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Mon, 17 Mar 2025 23:01:22 +0100 Subject: [PATCH] Fix parser expectation error for amp token Currently, this is only handled for the "unexpected token" part of the message, but not the "expected" part. Fixes GH-18026 --- Zend/tests/gh18026.phpt | 12 ++++++++++++ Zend/zend_language_parser.y | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 Zend/tests/gh18026.phpt diff --git a/Zend/tests/gh18026.phpt b/Zend/tests/gh18026.phpt new file mode 100644 index 000000000000..0e33e349b12f --- /dev/null +++ b/Zend/tests/gh18026.phpt @@ -0,0 +1,12 @@ +--TEST-- +GH-18026: Confusing "amp" reference in parser error +--FILE-- + +--EXPECTF-- +Parse error: syntax error, unexpected token ")", expecting token "&" in %s on line %d diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index c671b3a295e5..1f117d142c15 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -1819,6 +1819,14 @@ static YYSIZE_T zend_yytnamerr(char *yyres, const char *yystr) return sizeof("\"\\\"")-1; } + /* We used "amp" as a dummy label to avoid a duplicate token literal warning. */ + if (strcmp(toktype, "\"amp\"") == 0) { + if (yyres) { + yystpcpy(yyres, "token \"&\""); + } + return sizeof("token \"&\"")-1; + } + /* Strip off the outer quote marks */ if (toktype_len >= 2 && *toktype == '"') { toktype++;