From df455a33fd61629fd87f8faa17e22ab42bd16ea1 Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 17 Feb 2023 09:52:57 -0800 Subject: [PATCH] Use correct wireformat type for repeated group fields. PiperOrigin-RevId: 510456181 --- src/google/protobuf/message_unittest.inc | 18 ++++++++++++++++++ src/google/protobuf/unittest.proto | 3 +++ 2 files changed, 21 insertions(+) diff --git a/src/google/protobuf/message_unittest.inc b/src/google/protobuf/message_unittest.inc index 4305f5310c..24e67b5209 100644 --- a/src/google/protobuf/message_unittest.inc +++ b/src/google/protobuf/message_unittest.inc @@ -465,6 +465,24 @@ TEST(MESSAGE_TEST_NAME, ParseFailsIfGroupFieldMalformed) { EXPECT_FALSE(parsed.ParseFromString(data)); } +TEST(MESSAGE_TEST_NAME, ParseFailsIfRepeatedGroupFieldMalformed) { + UNITTEST::TestMutualRecursionA original, parsed; + original.mutable_bb() + ->mutable_a() + ->add_subgroupr() + ->mutable_payload() + ->set_optional_int64(-1); + + std::string data; + ASSERT_TRUE(original.SerializeToString(&data)); + // Should parse correctly. + ASSERT_TRUE(parsed.ParseFromString(data)); + // Overwriting the last byte of varint (-1) to 0xFF results in malformed wire. + data[data.size() - 2] = 0xFF; + + EXPECT_FALSE(parsed.ParseFromString(data)); +} + TEST(MESSAGE_TEST_NAME, UninitializedAndMalformed) { UNITTEST::TestRequiredForeign o, p1, p2; o.mutable_optional_message()->set_a(-1); diff --git a/src/google/protobuf/unittest.proto b/src/google/protobuf/unittest.proto index 479262f612..7ebd53f9a2 100644 --- a/src/google/protobuf/unittest.proto +++ b/src/google/protobuf/unittest.proto @@ -552,6 +552,9 @@ message TestMutualRecursionA { optional SubMessage sub_message = 3; // Needed because of bug in javatest optional TestAllTypes not_in_this_scc = 4; } + repeated group SubGroupR = 5 { + optional TestAllTypes payload = 6; + } } message TestMutualRecursionB {