diff --git a/source/common/protobuf/utility.cc b/source/common/protobuf/utility.cc index 3c93c42992d34..966a2fdbf0596 100644 --- a/source/common/protobuf/utility.cc +++ b/source/common/protobuf/utility.cc @@ -49,7 +49,9 @@ ProtoValidationException::ProtoValidationException(const std::string& validation } void MessageUtil::loadFromJson(const std::string& json, Protobuf::Message& message) { - const auto status = Protobuf::util::JsonStringToMessage(json, &message); + Protobuf::util::JsonParseOptions options; + options.ignore_unknown_fields = true; + const auto status = Protobuf::util::JsonStringToMessage(json, &message, options); if (!status.ok()) { throw EnvoyException("Unable to parse JSON as proto (" + status.ToString() + "): " + json); } diff --git a/test/common/protobuf/utility_test.cc b/test/common/protobuf/utility_test.cc index 92dd351b53b0b..e7f5ee34fd402 100644 --- a/test/common/protobuf/utility_test.cc +++ b/test/common/protobuf/utility_test.cc @@ -211,6 +211,12 @@ TEST(UtilityTest, JsonConvertSuccess) { EXPECT_EQ(42, dest_duration.seconds()); } +TEST(UtilityTest, JsonConvertUnknownFieldSuccess) { + const ProtobufWkt::Struct obj = MessageUtil::keyValueStruct("test_key", "test_value"); + envoy::config::bootstrap::v2::Bootstrap bootstrap; + EXPECT_NO_THROW(MessageUtil::jsonConvert(obj, bootstrap)); +} + TEST(UtilityTest, JsonConvertFail) { ProtobufWkt::Duration source_duration; source_duration.set_seconds(-281474976710656);