Browse Source

goprotobuf: Fix panic in SetDefaults for nil sub-messages.

Fixes #23.

R=r
CC=golang-dev
http://codereview.appspot.com/5477071
David Symonds 14 years ago
parent
commit
814b936cd0
3 changed files with 13 additions and 2 deletions
  1. 1 1
      proto/all_test.go
  2. 5 1
      proto/lib.go
  3. 7 0
      proto/testdata/test.proto

+ 1 - 1
proto/all_test.go

@@ -1279,7 +1279,7 @@ func TestSetDefaultsWithSubMessage(t *testing.T) {
 	}
 	SetDefaults(m)
 	if !Equal(m, expected) {
-		t.Errorf(" got %v\nwant %v", m, expected)
+		t.Errorf("\n got %v\nwant %v", m, expected)
 	}
 }
 

+ 5 - 1
proto/lib.go

@@ -657,7 +657,11 @@ func setDefaults(v reflect.Value, recur, zeros bool) {
 	}
 
 	for _, ni := range dm.nested {
-		setDefaults(v.Field(ni), recur, zeros)
+		f := v.Field(ni)
+		if f.IsNil() {
+			continue
+		}
+		setDefaults(f, recur, zeros)
 	}
 }
 

+ 7 - 0
proto/testdata/test.proto

@@ -288,6 +288,13 @@ message Defaults {
   optional float F_Pinf = 15 [default=inf];
   optional float F_Ninf = 16 [default=-inf];
   optional float F_Nan = 17 [default=nan];
+
+  // Sub-message.
+  optional SubDefaults sub = 18;
+}
+
+message SubDefaults {
+  optional int64 n = 1 [default=7];
 }
 
 message RepeatedEnum {