postgres.git / summary / log / commit / refs
commit 09e99a10827e4300daf733a57748405e22e51181
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri Sep 07 23:17:14 2001 +0000
First released in: 7.2
Change addlit() to not assume its input is null-terminated, so that we
don't have more bugs like the quote-quote-quote-quote one. Propagate
fix into ecpg lexer, too.
src/backend/parser/scan.l | 13 +++++++------
src/interfaces/ecpg/preproc/pgc.l | 11 ++++++-----
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 3f64341d557..b071032972a 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.89 2001/09/04 00:19:39 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.90 2001/09/07 23:17:14 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -69,6 +69,8 @@ void unput(char);
extern YYSTYPE yylval;
+static int xcdepth = 0; /* depth of nesting in slash-star comments */
+
/*
* literalbuf is used to accumulate literal values when multiple rules
* are needed to parse a single literal. Call startlit to reset buffer
@@ -79,8 +81,6 @@ static char *literalbuf; /* expandable buffer */
static int literallen; /* actual current length */
static int literalalloc; /* current allocated buffer size */
-static int xcdepth = 0; /* depth of nesting in slash-star comments */
-
#define startlit() (literalbuf[0] = '\0', literallen = 0)
static void addlit(char *ytext, int yleng);
@@ -375,7 +375,7 @@ other .
return IDENT;
}
<xd>{xddouble} {
- addlit(yytext+1, yyleng-1);
+ addlit(yytext, yyleng-1);
}
<xd>{xdinside} {
addlit(yytext, yyleng);
@@ -581,9 +581,10 @@ addlit(char *ytext, int yleng)
} while ((literallen+yleng) >= literalalloc);
literalbuf = (char *) repalloc(literalbuf, literalalloc);
}
- /* append data --- note we assume ytext is null-terminated */
- memcpy(literalbuf+literallen, ytext, yleng+1);
+ /* append new data, add trailing null */
+ memcpy(literalbuf+literallen, ytext, yleng);
literallen += yleng;
+ literalbuf[literallen] = '\0';
}
#if !defined(FLEX_SCANNER)
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index 5929f1f1713..d6d99adcee3 100644
--- a/src/interfaces/ecpg/preproc/pgc.l
+++ b/src/interfaces/ecpg/preproc/pgc.l
@@ -12,7 +12,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.79 2001/06/13 12:38:58 meskes Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.80 2001/09/07 23:17:14 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -35,6 +35,8 @@
extern YYSTYPE yylval;
+static int xcdepth = 0; /* depth of nesting in slash-star comments */
+
/*
* literalbuf is used to accumulate literal values when multiple rules
* are needed to parse a single literal. Call startlit to reset buffer
@@ -45,8 +47,6 @@ static char *literalbuf = NULL; /* expandable buffer */
static int literallen; /* actual current length */
static int literalalloc; /* current allocated buffer size */
-static int xcdepth = 0;
-
#define startlit() (literalbuf[0] = '\0', literallen = 0)
static void addlit(char *ytext, int yleng);
@@ -923,9 +923,10 @@ addlit(char *ytext, int yleng)
} while ((literallen+yleng) >= literalalloc);
literalbuf = (char *) realloc(literalbuf, literalalloc);
}
- /* append data --- note we assume ytext is null-terminated */
- memcpy(literalbuf+literallen, ytext, yleng+1);
+ /* append new data, add trailing null */
+ memcpy(literalbuf+literallen, ytext, yleng);
literallen += yleng;
+ literalbuf[literallen] = '\0';
}
int yywrap(void)
[parent: b6385efb7907]