From b65ab3191069944a81c35911c9c846f8e08ef1a2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 11 Sep 1999 22:26:47 +0000 Subject: [PATCH] Eliminate token length assumption in scanstr(). --- src/backend/bootstrap/bootscanner.l | 11 ++++++++--- src/backend/parser/scan.l | 4 ++-- src/backend/parser/scansup.c | 12 +++++++----- src/interfaces/ecpg/preproc/pgc.l | 6 +++--- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l index 22fd7f483d..a7254994ec 100644 --- a/src/backend/bootstrap/bootscanner.l +++ b/src/backend/bootstrap/bootscanner.l @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootscanner.l,v 1.14 1999/07/17 20:16:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootscanner.l,v 1.15 1999/09/11 22:26:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -98,12 +98,17 @@ insert { return(INSERT_TUPLE); } return(ID); } {id} { - yylval.ival = EnterString(scanstr((char*)yytext)); + char *newid = scanstr((char*)yytext); + yylval.ival = EnterString(newid); + pfree(newid); return(ID); } {sid} { + char *newid; yytext[strlen(yytext)-1] = '\0'; /* strip off quotes */ - yylval.ival = EnterString(scanstr((char*)yytext+1)); + newid = scanstr((char*)yytext+1); + yylval.ival = EnterString(newid); + pfree(newid); yytext[strlen(yytext)] = '"'; /* restore quotes */ return(ID); } diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index ece71b489f..011676de1d 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.53 1999/09/07 00:13:27 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.54 1999/09/11 22:26:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -246,7 +246,7 @@ other . } {xqstop} { BEGIN(INITIAL); - yylval.str = pstrdup(scanstr(literal)); + yylval.str = scanstr(literal); return SCONST; } {xqdouble} | diff --git a/src/backend/parser/scansup.c b/src/backend/parser/scansup.c index df3ea1d931..4e15bd2409 100644 --- a/src/backend/parser/scansup.c +++ b/src/backend/parser/scansup.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.16 1999/07/17 20:17:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.17 1999/09/11 22:26:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -25,24 +25,26 @@ * if the string passed in has escaped codes, map the escape codes to actual * chars * - * the string returned is a pointer to static storage and should NOT - * be freed by the caller. + * the string returned is palloc'd and should eventually be pfree'd by the + * caller! * ---------------- */ char * scanstr(char *s) { - static char newStr[MAX_PARSE_BUFFER]; + char *newStr; int len, i, j; if (s == NULL || s[0] == '\0') - return s; + return pstrdup(""); len = strlen(s); + newStr = palloc(len+1); /* string cannot get longer */ + for (i = 0, j = 0; i < len; i++) { if (s[i] == '\'') diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index f583a60294..211183badf 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -239,7 +239,7 @@ cppline {space}*#.*(\\{space}*\n)*\n* } {xqstop} { BEGIN(SQL); - /* yylval.str = mm_strdup(scanstr(literal));*/ + /* yylval.str = scanstr(literal); */ yylval.str = mm_strdup(literal); return SCONST; } @@ -601,7 +601,7 @@ cppline {space}*#.*(\\{space}*\n)*\n* if (strcmp(old, ptr->old) == 0) { free(ptr->new); - /* ptr->new = mm_strdup(scanstr(literal));*/ + /* ptr->new = scanstr(literal); */ ptr->new = mm_strdup(literal); } } @@ -611,7 +611,7 @@ cppline {space}*#.*(\\{space}*\n)*\n* /* initial definition */ this->old = old; - /* this->new = mm_strdup(scanstr(literal));*/ + /* this->new = scanstr(literal); */ this->new = mm_strdup(literal); this->next = defines; defines = this;