From 6cc8fa3918f2f05fef68a31ec34d11d6f557341e Mon Sep 17 00:00:00 2001 From: Kuat Yessenov Date: Mon, 2 Jul 2018 16:22:45 -0700 Subject: [PATCH 1/2] ignore unknown fields in parsing jsons Signed-off-by: Kuat Yessenov --- source/common/protobuf/utility.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/common/protobuf/utility.cc b/source/common/protobuf/utility.cc index 3c93c42992d3..966a2fdbf059 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); } From d62a8d972deb23fa71a0432e27ff26c1d6673f91 Mon Sep 17 00:00:00 2001 From: Kuat Yessenov Date: Mon, 2 Jul 2018 17:45:05 -0700 Subject: [PATCH 2/2] add a regression test Signed-off-by: Kuat Yessenov --- test/common/protobuf/utility_test.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/common/protobuf/utility_test.cc b/test/common/protobuf/utility_test.cc index 92dd351b53b0..e7f5ee34fd40 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);