From: Russ Cox Date: Sun, 7 Oct 2012 20:35:45 +0000 (-0400) Subject: cmd/gc: skip over reported BOMs X-Git-Tag: go1.1rc2~2207 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d749783f70843741d6469f6c7edc77bfd820c1a6;p=gostls13.git cmd/gc: skip over reported BOMs This keeps the BOM runes from causing other errors. R=golang-dev, remyoudompheng CC=golang-dev https://golang.org/cl/6625062 --- diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 601f182997..703bb127df 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -1532,7 +1532,7 @@ yylex(void) static int getc(void) { - int c; + int c, c1, c2; c = curio.peekc; if(c != 0) { @@ -1545,8 +1545,20 @@ getc(void) c = *curio.cp & 0xff; if(c != 0) curio.cp++; - } else + } else { + loop: c = Bgetc(curio.bin); + if(c == 0xef) { + c1 = Bgetc(curio.bin); + c2 = Bgetc(curio.bin); + if(c1 == 0xbb && c2 == 0xbf) { + yyerrorl(lexlineno, "Unicode (UTF-8) BOM in middle of file"); + goto loop; + } + Bungetc(curio.bin); + Bungetc(curio.bin); + } + } check: switch(c) { @@ -1597,10 +1609,6 @@ loop: if(!fullrune(str, i)) goto loop; c = chartorune(&rune, str); - if(rune == BOM) { - lineno = lexlineno; - yyerror("Unicode (UTF-8) BOM in middle of file"); - } if(rune == Runeerror && c == 1) { lineno = lexlineno; yyerror("illegal UTF-8 sequence");