Module: wine Branch: master Commit: 577f202d25005aae5aa61c456d838e1d7bbb6bef URL: http://source.winehq.org/git/wine.git/?a=commit;h=577f202d25005aae5aa61c456d... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Sun Dec 5 16:33:13 2010 +0100 wrc: Only allow 7-bit ASCII characters in wide string constants. --- tools/wrc/parser.l | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/wrc/parser.l b/tools/wrc/parser.l index 834c568..a1ef1cf 100644 --- a/tools/wrc/parser.l +++ b/tools/wrc/parser.l @@ -470,7 +470,11 @@ L\" { <tklstr>\\r addwchar('\r'); <tklstr>\\t addwchar('\t'); <tklstr>\\v addwchar('\v'); -<tklstr>\\. addwchar(yytext[1]); +<tklstr>\\. { + if (yytext[1] & 0x80) + parser_error("Invalid char %u in wide string", (unsigned char)yytext[1]); + addwchar(yytext[1]); + } <tklstr>\\\r\n addwchar(yytext[2]); line_number++; char_number = 1; <tklstr>\"\" addwchar('\"'); /* "bla""bla" -> "bla\"bla" */ <tklstr>\\\"\" addwchar('\"'); /* "bla\""bla" -> "bla\"bla" */ @@ -478,7 +482,11 @@ L\" { <tklstr>[^\\\n\"]+ { char *yptr = yytext; while(*yptr) /* FIXME: codepage translation */ - addwchar(*yptr++ & 0xff); + { + if (*yptr & 0x80) + parser_error("Invalid char %u in wide string", (unsigned char)*yptr); + addwchar(*yptr++ & 0xff); + } } <tklstr>\n parser_error("Unterminated string");