proto: don't panic when calling ExtensionDescs on an uninitialized message.
diff --git a/proto/extensions.go b/proto/extensions.go index 482f3e9..6b9b363 100644 --- a/proto/extensions.go +++ b/proto/extensions.go
@@ -500,6 +500,9 @@ registeredExtensions := RegisteredExtensions(pb) emap, mu := epb.extensionsRead() + if emap == nil { + return nil, nil + } mu.Lock() defer mu.Unlock() extensions := make([]*ExtensionDesc, 0, len(emap))
diff --git a/proto/extensions_test.go b/proto/extensions_test.go index 4278a87..403d7c6 100644 --- a/proto/extensions_test.go +++ b/proto/extensions_test.go
@@ -66,6 +66,10 @@ func TestExtensionDescsWithMissingExtensions(t *testing.T) { msg := &pb.MyMessage{Count: proto.Int32(0)} extdesc1 := pb.E_Ext_More + if descs, err := proto.ExtensionDescs(msg); len(descs) != 0 || err != nil { + t.Errorf("proto.ExtensionDescs: got %d descs, error %v; want 0, nil", len(descs), err) + } + ext1 := &pb.Ext{} if err := proto.SetExtension(msg, extdesc1, ext1); err != nil { t.Fatalf("Could not set ext1: %s", err)