internal/impl: fix size for zero-length packed extensions

The size calculation for packed repeated extension fields was
considering a zero-length list as encoding to a zero-length
wire.BytesType field, rather than being omitted entirely.

Change-Id: I7d4424a21ca8afd4fa81391caede49cadb4e2505
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/212297
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/proto/testmessages_test.go b/proto/testmessages_test.go
index 2e722f8..48c0c34 100644
--- a/proto/testmessages_test.go
+++ b/proto/testmessages_test.go
@@ -493,8 +493,23 @@
 		decodeTo: []proto.Message{
 			&testpb.TestAllTypes{},
 			&test3pb.TestAllTypes{},
-			&testpb.TestAllExtensions{},
-		},
+			build(
+				&testpb.TestAllExtensions{},
+				extend(testpb.E_RepeatedInt32Extension, []int32{}),
+				extend(testpb.E_RepeatedInt64Extension, []int64{}),
+				extend(testpb.E_RepeatedUint32Extension, []uint32{}),
+				extend(testpb.E_RepeatedUint64Extension, []uint64{}),
+				extend(testpb.E_RepeatedSint32Extension, []int32{}),
+				extend(testpb.E_RepeatedSint64Extension, []int64{}),
+				extend(testpb.E_RepeatedFixed32Extension, []uint32{}),
+				extend(testpb.E_RepeatedFixed64Extension, []uint64{}),
+				extend(testpb.E_RepeatedSfixed32Extension, []int32{}),
+				extend(testpb.E_RepeatedSfixed64Extension, []int64{}),
+				extend(testpb.E_RepeatedFloatExtension, []float32{}),
+				extend(testpb.E_RepeatedDoubleExtension, []float64{}),
+				extend(testpb.E_RepeatedBoolExtension, []bool{}),
+				extend(testpb.E_RepeatedNestedEnumExtension, []testpb.TestAllTypes_NestedEnum{}),
+			)},
 		wire: pack.Message{
 			pack.Tag{31, pack.BytesType}, pack.LengthPrefix{},
 			pack.Tag{32, pack.BytesType}, pack.LengthPrefix{},
@@ -602,8 +617,23 @@
 		desc: "packed repeated types (zero length)",
 		decodeTo: []proto.Message{
 			&testpb.TestPackedTypes{},
-			&testpb.TestPackedExtensions{},
-		},
+			build(
+				&testpb.TestPackedExtensions{},
+				extend(testpb.E_PackedInt32Extension, []int32{}),
+				extend(testpb.E_PackedInt64Extension, []int64{}),
+				extend(testpb.E_PackedUint32Extension, []uint32{}),
+				extend(testpb.E_PackedUint64Extension, []uint64{}),
+				extend(testpb.E_PackedSint32Extension, []int32{}),
+				extend(testpb.E_PackedSint64Extension, []int64{}),
+				extend(testpb.E_PackedFixed32Extension, []uint32{}),
+				extend(testpb.E_PackedFixed64Extension, []uint64{}),
+				extend(testpb.E_PackedSfixed32Extension, []int32{}),
+				extend(testpb.E_PackedSfixed64Extension, []int64{}),
+				extend(testpb.E_PackedFloatExtension, []float32{}),
+				extend(testpb.E_PackedDoubleExtension, []float64{}),
+				extend(testpb.E_PackedBoolExtension, []bool{}),
+				extend(testpb.E_PackedEnumExtension, []testpb.ForeignEnum{}),
+			)},
 		wire: pack.Message{
 			pack.Tag{90, pack.BytesType}, pack.LengthPrefix{},
 			pack.Tag{91, pack.BytesType}, pack.LengthPrefix{},