internal/impl: recognized required bytes fields in validation

Add a missed case in validation so we correctly validate bytes fields.
Fixes a case where we would report required bytes fields as potentially
missing.

Change-Id: I3dc4196d6995942d32a795a64214b3679d60ab6c
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/215000
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/proto/testmessages_test.go b/proto/testmessages_test.go
index 3019fcc..39ddeb3 100644
--- a/proto/testmessages_test.go
+++ b/proto/testmessages_test.go
@@ -12,6 +12,7 @@
 
 	legacypb "google.golang.org/protobuf/internal/testprotos/legacy"
 	legacy1pb "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20160225_2fc053c5"
+	requiredpb "google.golang.org/protobuf/internal/testprotos/required"
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
 	test3pb "google.golang.org/protobuf/internal/testprotos/test3"
 )
@@ -1154,20 +1155,62 @@
 		decodeTo: []proto.Message{(*testpb.TestRequired)(nil)},
 	},
 	{
-		desc:     "required field unset",
+		desc:     "required int32 unset",
 		partial:  true,
-		decodeTo: []proto.Message{&testpb.TestRequired{}},
+		decodeTo: []proto.Message{&requiredpb.Int32{}},
 	},
 	{
-		desc: "required field set",
-		decodeTo: []proto.Message{&testpb.TestRequired{
-			RequiredField: proto.Int32(1),
+		desc: "required int32 set",
+		decodeTo: []proto.Message{&requiredpb.Int32{
+			V: proto.Int32(1),
 		}},
 		wire: pack.Message{
 			pack.Tag{1, pack.VarintType}, pack.Varint(1),
 		}.Marshal(),
 	},
 	{
+		desc:     "required fixed32 unset",
+		partial:  true,
+		decodeTo: []proto.Message{&requiredpb.Fixed32{}},
+	},
+	{
+		desc: "required fixed32 set",
+		decodeTo: []proto.Message{&requiredpb.Fixed32{
+			V: proto.Uint32(1),
+		}},
+		wire: pack.Message{
+			pack.Tag{1, pack.Fixed32Type}, pack.Int32(1),
+		}.Marshal(),
+	},
+	{
+		desc:     "required fixed64 unset",
+		partial:  true,
+		decodeTo: []proto.Message{&requiredpb.Fixed64{}},
+	},
+	{
+		desc: "required fixed64 set",
+		decodeTo: []proto.Message{&requiredpb.Fixed64{
+			V: proto.Uint64(1),
+		}},
+		wire: pack.Message{
+			pack.Tag{1, pack.Fixed64Type}, pack.Int64(1),
+		}.Marshal(),
+	},
+	{
+		desc:     "required bytes unset",
+		partial:  true,
+		decodeTo: []proto.Message{&requiredpb.Bytes{}},
+	},
+	{
+		desc: "required bytes set",
+		decodeTo: []proto.Message{&requiredpb.Bytes{
+			V: []byte{},
+		}},
+		wire: pack.Message{
+			pack.Tag{1, pack.BytesType}, pack.Bytes(nil),
+		}.Marshal(),
+	},
+	{
 		desc:    "required field with incompatible wire type",
 		partial: true,
 		decodeTo: []proto.Message{build(