diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index e102e7c81e8..146ae3db2d6 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -737,7 +737,8 @@ other . {xustop1} | <> { /* no UESCAPE after the quote, throw back everything */ - char *ident; + char *ident; + int identlen; yyless(0); @@ -745,14 +746,16 @@ other . if (yyextra->literallen == 0) yyerror("zero-length delimited identifier"); ident = litbuf_udeescape('\\', yyscanner); - if (yyextra->literallen >= NAMEDATALEN) - truncate_identifier(ident, yyextra->literallen, true); + identlen = strlen(ident); + if (identlen >= NAMEDATALEN) + truncate_identifier(ident, identlen, true); yylval->str = ident; return IDENT; } {xustop2} { /* found UESCAPE after the end quote */ - char *ident; + char *ident; + int identlen; BEGIN(INITIAL); if (yyextra->literallen == 0) @@ -764,8 +767,9 @@ other . yyerror("invalid Unicode escape character"); } ident = litbuf_udeescape(yytext[yyleng - 2], yyscanner); - if (yyextra->literallen >= NAMEDATALEN) - truncate_identifier(ident, yyextra->literallen, true); + identlen = strlen(ident); + if (identlen >= NAMEDATALEN) + truncate_identifier(ident, identlen, true); yylval->str = ident; return IDENT; }