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)