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)