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(