Merge pull request #3706 from evolutional/fix-3506

Check (& skip) of the utf-8 byte order mark
This commit is contained in:
Wouter van Oortmerssen
2016-01-19 11:10:07 -08:00
2 changed files with 10 additions and 0 deletions

View File

@@ -200,6 +200,14 @@ CheckedError Parser::ParseHexNum(int nibbles, int64_t *val) {
return NoError();
}
CheckedError Parser::SkipByteOrderMark() {
if (static_cast<unsigned char>(*cursor_) != 0xef) return NoError();
cursor_++;
if (static_cast<unsigned char>(*cursor_++) != 0xbb) return Error("invalid utf-8 byte order mark");
if (static_cast<unsigned char>(*cursor_++) != 0xbf) return Error("invalid utf-8 byte order mark");
return NoError();
}
CheckedError Parser::Next() {
doc_comment_.clear();
bool seen_newline = false;
@@ -1588,6 +1596,7 @@ CheckedError Parser::DoParse(const char *source, const char **include_paths,
builder_.Clear();
// Start with a blank namespace just in case this file doesn't have one.
namespaces_.push_back(new Namespace());
ECHECK(SkipByteOrderMark());
NEXT();
// Includes must come before type declarations:
for (;;) {