Просмотр исходного кода

proto: don't panic when calling ExtensionDescs on an uninitialized message.

Damien Neil 9 лет назад
Родитель
Сommit
51fb628d55
2 измененных файлов с 7 добавлено и 0 удалено
  1. 3 0
      proto/extensions.go
  2. 4 0
      proto/extensions_test.go

+ 3 - 0
proto/extensions.go

@@ -500,6 +500,9 @@ func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
 	registeredExtensions := RegisteredExtensions(pb)
 
 	emap, mu := epb.extensionsRead()
+	if emap == nil {
+		return nil, nil
+	}
 	mu.Lock()
 	defer mu.Unlock()
 	extensions := make([]*ExtensionDesc, 0, len(emap))

+ 4 - 0
proto/extensions_test.go

@@ -66,6 +66,10 @@ func TestGetExtensionsWithMissingExtensions(t *testing.T) {
 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)