From: Robert Haas Date: Fri, 12 Dec 2025 17:22:08 +0000 (-0500) Subject: Ban zero-length delimited identifiers. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.%3Cscript%20data-cfasync=?a=commitdiff_plain;h=ebff01be75e80fc02916f583555b2d11d27a6d4c;p=users%2Frhaas%2Fpostgres.git Ban zero-length delimited identifiers. --- 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';