From fa96a5e15b69707c2e05aa04bc73fa88b9a85f7a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 24 Feb 2004 22:06:32 +0000 Subject: [PATCH] Add %option nodefault to all our flex lexers. Fix a couple of rule gaps exposed thereby. AFAICT these would not lead to any worse problems than junk emitted on the backend's stdout, but we should have the option to catch possible worse errors in future. --- contrib/cube/cubescan.l | 3 ++- contrib/seg/segscan.l | 3 ++- contrib/tsearch/parser.l | 1 + contrib/tsearch2/wordparser/parser.l | 1 + src/backend/bootstrap/bootscanner.l | 3 ++- src/backend/utils/misc/guc-file.l | 3 ++- src/interfaces/ecpg/preproc/pgc.l | 3 ++- src/pl/plpgsql/src/scan.l | 6 ++++-- 8 files changed, 16 insertions(+), 7 deletions(-) diff --git a/contrib/cube/cubescan.l b/contrib/cube/cubescan.l index c5e1a20f6b..a47dc4334a 100644 --- a/contrib/cube/cubescan.l +++ b/contrib/cube/cubescan.l @@ -26,6 +26,7 @@ void cube_scanner_finish(void); %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap %option prefix="cube_yy" @@ -44,7 +45,7 @@ float ({integer}|{real})([eE]{integer})? \( yylval = "("; return O_PAREN; \) yylval = ")"; return C_PAREN; \, yylval = ")"; return COMMA; -[ ]+ /* discard spaces */ +[ \t\n\r\f]+ /* discard spaces */ . return yytext[0]; /* alert parser of the garbage */ %% diff --git a/contrib/seg/segscan.l b/contrib/seg/segscan.l index 21eb5fa020..b2a3bbe684 100644 --- a/contrib/seg/segscan.l +++ b/contrib/seg/segscan.l @@ -25,6 +25,7 @@ void seg_scanner_finish(void); %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap %option prefix="seg_yy" @@ -44,7 +45,7 @@ float ({integer}|{real})([eE]{integer})? \< yylval.text = "<"; return EXTENSION; \> yylval.text = ">"; return EXTENSION; \~ yylval.text = "~"; return EXTENSION; -[ ]+ /* discard spaces */ +[ \t\n\r\f]+ /* discard spaces */ . return yytext[0]; /* alert parser of the garbage */ %% diff --git a/contrib/tsearch/parser.l b/contrib/tsearch/parser.l index 17ac21dcd1..3eb411dded 100644 --- a/contrib/tsearch/parser.l +++ b/contrib/tsearch/parser.l @@ -16,6 +16,7 @@ YY_BUFFER_STATE buf = NULL; /* buffer to parse; it need for parse from string */ %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap diff --git a/contrib/tsearch2/wordparser/parser.l b/contrib/tsearch2/wordparser/parser.l index e36c19355c..e80f5fea90 100644 --- a/contrib/tsearch2/wordparser/parser.l +++ b/contrib/tsearch2/wordparser/parser.l @@ -18,6 +18,7 @@ YY_BUFFER_STATE buf = NULL; /* buffer to parse; it need for parse from string */ %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l index 6d3081695f..d8f683596d 100644 --- a/src/backend/bootstrap/bootscanner.l +++ b/src/backend/bootstrap/bootscanner.l @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/bootstrap/bootscanner.l,v 1.32 2003/11/29 19:51:41 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/bootstrap/bootscanner.l,v 1.33 2004/02/24 22:06:32 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -53,6 +53,7 @@ static int yyline; /* keep track of the line number for error reporting */ %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index df89572260..eb5f0c7f07 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -4,7 +4,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.20 2003/11/29 19:52:03 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.21 2004/02/24 22:06:32 tgl Exp $ */ %{ @@ -47,6 +47,7 @@ char *GUC_scanstr(char *); %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 264f93f847..376c87c73b 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -12,7 +12,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.125 2004/02/15 13:48:54 meskes Exp $ + * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.126 2004/02/24 22:06:32 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -70,6 +70,7 @@ static struct _if_value %option 8bit %option never-interactive +%option nodefault %option noyywrap %option yylineno diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l index 62a7880c6c..b891e2b9e1 100644 --- a/src/pl/plpgsql/src/scan.l +++ b/src/pl/plpgsql/src/scan.l @@ -4,7 +4,7 @@ * procedural language * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.30 2003/11/29 19:52:12 pgsql Exp $ + * $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.31 2004/02/24 22:06:32 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -63,6 +63,7 @@ int plpgsql_SpaceScanned = 0; %option 8bit %option never-interactive +%option nodefault %option nounput %option noyywrap @@ -272,6 +273,7 @@ dump { return O_DUMP; } BEGIN IN_STRING; } \\. { } +\\ { /* can only happen with \ at EOF */ } '' { } ' { yyleng -= (yytext - start_charpos); @@ -279,13 +281,13 @@ dump { return O_DUMP; } BEGIN INITIAL; return T_STRING; } +[^'\\]+ { } <> { plpgsql_error_lineno = start_lineno; ereport(ERROR, (errcode(ERRCODE_DATATYPE_MISMATCH), errmsg("unterminated string"))); } -[^'\\]* { } /* ---------- * Any unmatched character is returned as is