diff --git a/src/google/protobuf/compiler/parser_unittest.cc b/src/google/protobuf/compiler/parser_unittest.cc index 75784ab120..3c95a53e5f 100644 --- a/src/google/protobuf/compiler/parser_unittest.cc +++ b/src/google/protobuf/compiler/parser_unittest.cc @@ -1134,6 +1134,19 @@ TEST_F(ParseMessageTest, ExplicitOptionalLabelProto3) { "}"); } +TEST_F(ParseMessageTest, CanHandleErrorOnFirstToken) { + require_syntax_identifier_ = false; + ExpectHasEarlyExitErrors( + "/", "0:0: Expected top-level statement (e.g. \"message\").\n"); + + require_syntax_identifier_ = true; + ExpectHasEarlyExitErrors( + "/", + "0:0: Expected top-level statement (e.g. \"message\").\n" + "0:0: File must begin with a syntax statement, e.g. 'syntax = " + "\"proto2\";'.\n"); +} + // =================================================================== typedef ParserTest ParseEnumTest; diff --git a/src/google/protobuf/io/tokenizer.cc b/src/google/protobuf/io/tokenizer.cc index d75dfabf19..3a22546378 100644 --- a/src/google/protobuf/io/tokenizer.cc +++ b/src/google/protobuf/io/tokenizer.cc @@ -235,6 +235,7 @@ Tokenizer::Tokenizer(ZeroCopyInputStream* input, current_.column = 0; current_.end_column = 0; current_.type = TYPE_START; + previous_ = current_; Refresh(); }