From ebff01be75e80fc02916f583555b2d11d27a6d4c Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Fri, 12 Dec 2025 12:22:08 -0500 Subject: [PATCH] Ban zero-length delimited identifiers. --- contrib/pg_plan_advice/expected/syntax.out | 6 ++++++ contrib/pg_plan_advice/pgpa_scanner.l | 3 +++ contrib/pg_plan_advice/sql/syntax.sql | 2 ++ 3 files changed, 11 insertions(+) diff --git a/contrib/pg_plan_advice/expected/syntax.out b/contrib/pg_plan_advice/expected/syntax.out index 36200c8935..eec0298089 100644 --- a/contrib/pg_plan_advice/expected/syntax.out +++ b/contrib/pg_plan_advice/expected/syntax.out @@ -84,6 +84,12 @@ DETAIL: Could not parse advice: syntax error at end of input SET pg_plan_advice.advice = 'SEQ_SCAN("'; ERROR: invalid value for parameter "pg_plan_advice.advice": "SEQ_SCAN("" DETAIL: Could not parse advice: unterminated quoted identifier at end of input +SET pg_plan_advice.advice = 'SEQ_SCAN("")'; +ERROR: invalid value for parameter "pg_plan_advice.advice": "SEQ_SCAN("")" +DETAIL: Could not parse advice: zero-length delimited identifier at or near """ +SET pg_plan_advice.advice = 'SEQ_SCAN("a"'; +ERROR: invalid value for parameter "pg_plan_advice.advice": "SEQ_SCAN("a"" +DETAIL: Could not parse advice: syntax error at end of input SET pg_plan_advice.advice = 'SEQ_SCAN(#'; ERROR: invalid value for parameter "pg_plan_advice.advice": "SEQ_SCAN(#" DETAIL: Could not parse advice: syntax error at or near "#" diff --git a/contrib/pg_plan_advice/pgpa_scanner.l b/contrib/pg_plan_advice/pgpa_scanner.l index be7d7ba13a..c49b29d906 100644 --- a/contrib/pg_plan_advice/pgpa_scanner.l +++ b/contrib/pg_plan_advice/pgpa_scanner.l @@ -189,6 +189,9 @@ xcinside [^*/]+ {xdstop} { BEGIN(INITIAL); + if (yyextra->litbuf.len == 0) + pgpa_yyerror(result, parse_error_msg_p, yyscanner, + "zero-length delimited identifier"); yylval->str = pstrdup(yyextra->litbuf.data); return TOK_IDENT; } diff --git a/contrib/pg_plan_advice/sql/syntax.sql b/contrib/pg_plan_advice/sql/syntax.sql index 5f86ecf43b..0692dc895c 100644 --- a/contrib/pg_plan_advice/sql/syntax.sql +++ b/contrib/pg_plan_advice/sql/syntax.sql @@ -26,6 +26,8 @@ SET pg_plan_advice.advice = 'SEQUENTIAL_SCAN(x)'; SET pg_plan_advice.advice = 'SEQ_SCAN'; SET pg_plan_advice.advice = 'SEQ_SCAN('; SET pg_plan_advice.advice = 'SEQ_SCAN("'; +SET pg_plan_advice.advice = 'SEQ_SCAN("")'; +SET pg_plan_advice.advice = 'SEQ_SCAN("a"'; SET pg_plan_advice.advice = 'SEQ_SCAN(#'; SET pg_plan_advice.advice = '()'; SET pg_plan_advice.advice = '123'; -- 2.39.5