proto, internal/impl: make IsInitialized more consistent
Make the fast-path and slow-path versions of IsInitialized report
exactly the same errors: An errors.RequiredNotSet containing the
full name of one of the unset required fields.
Bugfix: Fast-path IsInitialized on a nil message reports an error only
when the message directly contains required fields.
Bugfix: Include fast-path IsInitialized in legacy messageIfaceWrapper.
Fixes golang/protobuf#887
Change-Id: Ia5e4b386f8c23f6f855d995f4a098b1338acbae3
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/185397
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/proto/decode_test.go b/proto/decode_test.go
index 3b919aa..03f337a 100644
--- a/proto/decode_test.go
+++ b/proto/decode_test.go
@@ -952,6 +952,11 @@
}.Marshal(),
},
{
+ desc: "required field in nil message unset",
+ partial: true,
+ decodeTo: []proto.Message{(*testpb.TestRequired)(nil)},
+ },
+ {
desc: "required field unset",
partial: true,
decodeTo: []proto.Message{&testpb.TestRequired{}},
@@ -1224,6 +1229,14 @@
}.Marshal(),
},
{
+ desc: "nil messages",
+ decodeTo: []proto.Message{
+ (*testpb.TestAllTypes)(nil),
+ (*test3pb.TestAllTypes)(nil),
+ (*testpb.TestAllExtensions)(nil),
+ },
+ },
+ {
desc: "legacy",
partial: true,
decodeTo: []proto.Message{