postgres.git / summary / log / commit / refs

commit    8439ee415f4d8850806a7fb59cc7ce4dbb6ea2ed
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Thu Feb 13 19:24:49 2014 +0000
First released in: 9.4.0, 8.4.20, 9.0.16, 9.1.12, 9.2.7, 9.3.3

    Fix length checking for Unicode identifiers containing escapes (U&"...").
    
    We used the length of the input string, not the de-escaped string, as
    the trigger for NAMEDATALEN truncation.  AFAICS this would only result
    in sometimes printing a phony truncation warning; but it's just luck
    that there was no worse problem, since we were violating the API spec
    for truncate_identifier().  Per bug #9204 from Joshua Yanovski.
    
    This has been wrong since the Unicode-identifier support was added,
    so back-patch to all supported branches.


src/backend/parser/scan.l | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index 6b216b53786..cde8fae620f 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -697,28 +697,32 @@ other . return IDENT; } <xui>{xuistop1} { - char *ident; + char *ident; + int identlen; BEGIN(INITIAL); 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; /* throw back all but the quote */ yyless(1); return IDENT; } <xui>{xuistop2} { - char *ident; + char *ident; + int identlen; BEGIN(INITIAL); if (yyextra->literallen == 0) yyerror("zero-length delimited identifier"); 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; } [parent: 22fce59aaf81]