Eliminate token length assumption in scanstr().

This commit is contained in:
Tom Lane 1999-09-11 22:26:47 +00:00
parent a7fd74edb3
commit b65ab31910
4 changed files with 20 additions and 13 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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); return(ID);
} }
{id} { {id} {
yylval.ival = EnterString(scanstr((char*)yytext)); char *newid = scanstr((char*)yytext);
yylval.ival = EnterString(newid);
pfree(newid);
return(ID); return(ID);
} }
{sid} { {sid} {
char *newid;
yytext[strlen(yytext)-1] = '\0'; /* strip off quotes */ 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 */ yytext[strlen(yytext)] = '"'; /* restore quotes */
return(ID); return(ID);
} }

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 .
} }
<xq>{xqstop} { <xq>{xqstop} {
BEGIN(INITIAL); BEGIN(INITIAL);
yylval.str = pstrdup(scanstr(literal)); yylval.str = scanstr(literal);
return SCONST; return SCONST;
} }
<xq>{xqdouble} | <xq>{xqdouble} |

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * if the string passed in has escaped codes, map the escape codes to actual
* chars * chars
* *
* the string returned is a pointer to static storage and should NOT * the string returned is palloc'd and should eventually be pfree'd by the
* be freed by the caller. * caller!
* ---------------- * ----------------
*/ */
char * char *
scanstr(char *s) scanstr(char *s)
{ {
static char newStr[MAX_PARSE_BUFFER]; char *newStr;
int len, int len,
i, i,
j; j;
if (s == NULL || s[0] == '\0') if (s == NULL || s[0] == '\0')
return s; return pstrdup("");
len = strlen(s); len = strlen(s);
newStr = palloc(len+1); /* string cannot get longer */
for (i = 0, j = 0; i < len; i++) for (i = 0, j = 0; i < len; i++)
{ {
if (s[i] == '\'') if (s[i] == '\'')

View File

@ -239,7 +239,7 @@ cppline {space}*#.*(\\{space}*\n)*\n*
} }
<xq>{xqstop} { <xq>{xqstop} {
BEGIN(SQL); BEGIN(SQL);
/* yylval.str = mm_strdup(scanstr(literal));*/ /* yylval.str = scanstr(literal); */
yylval.str = mm_strdup(literal); yylval.str = mm_strdup(literal);
return SCONST; return SCONST;
} }
@ -601,7 +601,7 @@ cppline {space}*#.*(\\{space}*\n)*\n*
if (strcmp(old, ptr->old) == 0) if (strcmp(old, ptr->old) == 0)
{ {
free(ptr->new); free(ptr->new);
/* ptr->new = mm_strdup(scanstr(literal));*/ /* ptr->new = scanstr(literal); */
ptr->new = mm_strdup(literal); ptr->new = mm_strdup(literal);
} }
} }
@ -611,7 +611,7 @@ cppline {space}*#.*(\\{space}*\n)*\n*
/* initial definition */ /* initial definition */
this->old = old; this->old = old;
/* this->new = mm_strdup(scanstr(literal));*/ /* this->new = scanstr(literal); */
this->new = mm_strdup(literal); this->new = mm_strdup(literal);
this->next = defines; this->next = defines;
defines = this; defines = this;