From fa96a5e15b69707c2e05aa04bc73fa88b9a85f7a Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
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 c5e1a20f6b1..a47dc4334aa 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 21eb5fa0207..b2a3bbe6845 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 17ac21dcd1c..3eb411dded3 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 e36c19355c5..e80f5fea903 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 6d3081695f4..d8f683596d9 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 df895722607..eb5f0c7f071 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 264f93f847c..376c87c73ba 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 62a7880c6c2..b891e2b9e18 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;
 			}
 <IN_STRING>\\.		{ }
+<IN_STRING>\\		{ /* can only happen with \ at EOF */ }
 <IN_STRING>''		{ }
 <IN_STRING>'		{
 			  yyleng -= (yytext - start_charpos);
@@ -279,13 +281,13 @@ dump			{ return O_DUMP;			}
 			  BEGIN INITIAL;
 			  return T_STRING;
 			}
+<IN_STRING>[^'\\]+	{ }
 <IN_STRING><<EOF>>	{
 				plpgsql_error_lineno = start_lineno;
 				ereport(ERROR,
 						(errcode(ERRCODE_DATATYPE_MISMATCH),
 						 errmsg("unterminated string")));
 			}
-<IN_STRING>[^'\\]*	{ }
 
     /* ----------
      * Any unmatched character is returned as is
-- 
GitLab