aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-09-07 23:17:14 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-09-07 23:17:14 +0000
commit09e99a10827e4300daf733a57748405e22e51181 (patch)
tree79fe70365b8a4c6ed2151e603825668e045a0919 /src
parentb6385efb7907e1aefe65a699bb1fcc115d98ee23 (diff)
downloadpostgresql-09e99a10827e4300daf733a57748405e22e51181.tar.gz
postgresql-09e99a10827e4300daf733a57748405e22e51181.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/scan.l13
-rw-r--r--src/interfaces/ecpg/preproc/pgc.l11
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)