diff --git a/src/mutator_test.cc b/src/mutator_test.cc index fe93181..312b2d9 100644 --- a/src/mutator_test.cc +++ b/src/mutator_test.cc @@ -293,6 +293,14 @@ const char kOptionalInDeepAnyFields[] = R"( } )"; +const char kUnknownFieldInput[] = R"( + optional_bool: true + unknown_field: "test unknown field" +)"; + +const char kUnknownFieldExpected[] = R"(optional_bool: true +)"; + class TestMutator : public Mutator { public: explicit TestMutator(bool keep_initialized, @@ -668,6 +676,12 @@ TYPED_TEST(MutatorTypedTest, Serialization) { } } +TYPED_TEST(MutatorTypedTest, UnknownFieldTextFormat) { + typename TestFixture::Message parsed; + EXPECT_TRUE(ParseTextMessage(kUnknownFieldInput, &parsed)); + EXPECT_EQ(SaveMessageAsText(parsed), kUnknownFieldExpected); +} + TYPED_TEST(MutatorTypedTest, DeepRecursion) { typename TestFixture::Message message; typename TestFixture::Message* last = &message; diff --git a/src/text_format.cc b/src/text_format.cc index 94e6a79..4479229 100644 --- a/src/text_format.cc +++ b/src/text_format.cc @@ -30,6 +30,7 @@ bool ParseTextMessage(const std::string& data, protobuf::Message* output) { TextFormat::Parser parser; parser.SetRecursionLimit(100); parser.AllowPartialMessage(true); + parser.AllowUnknownField(true); if (!parser.ParseFromString(data, output)) { output->Clear(); return false;