goprotobuf: Fix Marshal crash on typed nil.
Also a bunch of other trivial updates.
R=r
CC=golang-dev
http://codereview.appspot.com/6501064
diff --git a/proto/all_test.go b/proto/all_test.go
index 5b4c93c..90f7a63 100644
--- a/proto/all_test.go
+++ b/proto/all_test.go
@@ -1221,6 +1221,14 @@
}
}
+func TestTypedNilMarshal(t *testing.T) {
+ // A typed nil should return ErrNil and not crash.
+ _, err := Marshal((*GoEnum)(nil))
+ if err != ErrNil {
+ t.Errorf("Marshal: got err %v, want ErrNil", err)
+ }
+}
+
// A type that implements the Marshaler interface, but is not nillable.
type nonNillableInt uint64
diff --git a/proto/clone_test.go b/proto/clone_test.go
index d111b47..e6edcf3 100644
--- a/proto/clone_test.go
+++ b/proto/clone_test.go
@@ -32,7 +32,6 @@
package proto_test
import (
- "log"
"testing"
"code.google.com/p/goprotobuf/proto"
@@ -62,7 +61,7 @@
Data: proto.String("extension"),
}
if err := proto.SetExtension(cloneTestMessage, pb.E_Ext_More, ext); err != nil {
- log.Fatalf("SetExtension: %v", err)
+ panic("SetExtension: " + err.Error())
}
}
diff --git a/proto/encode.go b/proto/encode.go
index 2eec125..4e55816 100644
--- a/proto/encode.go
+++ b/proto/encode.go
@@ -196,6 +196,9 @@
}
t, b, err := getbase(pb)
+ if b == 0 {
+ return ErrNil
+ }
if err == nil {
err = p.enc_struct(t.Elem(), GetProperties(t.Elem()), b)
}
diff --git a/proto/equal_test.go b/proto/equal_test.go
index f747d9e..0096aa9 100644
--- a/proto/equal_test.go
+++ b/proto/equal_test.go
@@ -32,7 +32,6 @@
package proto_test
import (
- "log"
"testing"
pb "./testdata"
@@ -56,32 +55,32 @@
// messageWithExtension1a has ext1, but never marshals it.
if err := SetExtension(messageWithExtension1a, pb.E_Ext_More, ext1); err != nil {
- log.Panicf("SetExtension on 1a failed: %v", err)
+ panic("SetExtension on 1a failed: " + err.Error())
}
// messageWithExtension1b is the unmarshaled form of messageWithExtension1a.
if err := SetExtension(messageWithExtension1b, pb.E_Ext_More, ext1); err != nil {
- log.Panicf("SetExtension on 1b failed: %v", err)
+ panic("SetExtension on 1b failed: " + err.Error())
}
buf, err := Marshal(messageWithExtension1b)
if err != nil {
- log.Panicf("Marshal of 1b failed: %v", err)
+ panic("Marshal of 1b failed: " + err.Error())
}
messageWithExtension1b.Reset()
if err := Unmarshal(buf, messageWithExtension1b); err != nil {
- log.Panicf("Unmarshal of 1b failed: %v", err)
+ panic("Unmarshal of 1b failed: " + err.Error())
}
// messageWithExtension2 has ext2.
if err := SetExtension(messageWithExtension2, pb.E_Ext_More, ext2); err != nil {
- log.Panicf("SetExtension on 2 failed: %v", err)
+ panic("SetExtension on 2 failed: " + err.Error())
}
if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(23)); err != nil {
- log.Panicf("SetExtension on Int32-1 failed: %v", err)
+ panic("SetExtension on Int32-1 failed: " + err.Error())
}
if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(24)); err != nil {
- log.Panicf("SetExtension on Int32-2 failed: %v", err)
+ panic("SetExtension on Int32-2 failed: " + err.Error())
}
}
diff --git a/proto/text.go b/proto/text.go
index c31f3ff..18fb493 100644
--- a/proto/text.go
+++ b/proto/text.go
@@ -91,7 +91,7 @@
func (w *textWriter) unindent() {
if w.ind == 0 {
- log.Printf("proto: textWriter unindented too far!")
+ log.Printf("proto: textWriter unindented too far")
return
}
w.ind--
@@ -456,7 +456,7 @@
return buf.String()
}
-// CompactText writes a given protocl buffer in compact text format (one line).
+// CompactText writes a given protocol buffer in compact text format (one line).
func CompactText(w io.Writer, pb Message) { marshalText(w, pb, true) }
// CompactTextString is the same as CompactText, but returns the string directly.
diff --git a/protoc-gen-go/descriptor/descriptor.pb.golden b/protoc-gen-go/descriptor/descriptor.pb.golden
index 01a3063..19175bc 100644
--- a/protoc-gen-go/descriptor/descriptor.pb.golden
+++ b/protoc-gen-go/descriptor/descriptor.pb.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "google/protobuf/descriptor.proto"
+// Code generated by protoc-gen-go.
+// source: google/protobuf/descriptor.proto
// DO NOT EDIT!
package google_protobuf
diff --git a/protoc-gen-go/generator/generator.go b/protoc-gen-go/generator/generator.go
index cdd9888..f19f87a 100644
--- a/protoc-gen-go/generator/generator.go
+++ b/protoc-gen-go/generator/generator.go
@@ -322,7 +322,7 @@
func uniquePackageOf(fd *descriptor.FileDescriptorProto) string {
s, ok := uniquePackageName[fd]
if !ok {
- log.Fatal("internal error: no package name defined for", fd.GetName())
+ log.Fatal("internal error: no package name defined for " + fd.GetName())
}
return s
}
@@ -362,16 +362,14 @@
// Error reports a problem, including an error, and exits the program.
func (g *Generator) Error(err error, msgs ...string) {
s := strings.Join(msgs, " ") + ":" + err.Error()
- log.Println("protoc-gen-go: error:", s)
- g.Response.Error = proto.String(s)
+ log.Print("protoc-gen-go: error:", s)
os.Exit(1)
}
// Fail reports a problem and exits the program.
func (g *Generator) Fail(msgs ...string) {
s := strings.Join(msgs, " ")
- log.Println("protoc-gen-go: error:", s)
- g.Response.Error = proto.String(s)
+ log.Print("protoc-gen-go: error:", s)
os.Exit(1)
}
@@ -891,7 +889,8 @@
// Generate the header, including package definition
func (g *Generator) generateHeader() {
- g.P("// Code generated by protoc-gen-go from ", Quote(*g.file.Name))
+ g.P("// Code generated by protoc-gen-go.")
+ g.P("// source: ", *g.file.Name)
g.P("// DO NOT EDIT!")
g.P()
g.P("package ", g.file.PackageName())
@@ -1388,7 +1387,7 @@
obj := g.ObjectNamed(field.GetTypeName())
enum, ok := obj.(*EnumDescriptor)
if !ok {
- log.Println("don't know how to generate constant for", fieldname)
+ log.Print("don't know how to generate constant for", fieldname)
continue
}
def = g.DefaultPackageName(enum) + enum.prefix() + def
diff --git a/protoc-gen-go/plugin/plugin.pb.golden b/protoc-gen-go/plugin/plugin.pb.golden
index 1fa4681..d6bea92 100644
--- a/protoc-gen-go/plugin/plugin.pb.golden
+++ b/protoc-gen-go/plugin/plugin.pb.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "google/protobuf/compiler/plugin.proto"
+// Code generated by protoc-gen-go.
+// source: google/protobuf/compiler/plugin.proto
// DO NOT EDIT!
package google_protobuf_compiler
diff --git a/protoc-gen-go/testdata/imp.pb.go.golden b/protoc-gen-go/testdata/imp.pb.go.golden
index 26bf6c6..d97b3c7 100644
--- a/protoc-gen-go/testdata/imp.pb.go.golden
+++ b/protoc-gen-go/testdata/imp.pb.go.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "imp.proto"
+// Code generated by protoc-gen-go.
+// source: imp.proto
// DO NOT EDIT!
package imp
diff --git a/protoc-gen-go/testdata/my_test/test.pb.go b/protoc-gen-go/testdata/my_test/test.pb.go
index 03edfbf..b6a93da 100644
--- a/protoc-gen-go/testdata/my_test/test.pb.go
+++ b/protoc-gen-go/testdata/my_test/test.pb.go
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "my_test/test.proto"
+// Code generated by protoc-gen-go.
+// source: my_test/test.proto
// DO NOT EDIT!
package my_test
diff --git a/protoc-gen-go/testdata/my_test/test.pb.go.golden b/protoc-gen-go/testdata/my_test/test.pb.go.golden
index 03edfbf..b6a93da 100644
--- a/protoc-gen-go/testdata/my_test/test.pb.go.golden
+++ b/protoc-gen-go/testdata/my_test/test.pb.go.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "my_test/test.proto"
+// Code generated by protoc-gen-go.
+// source: my_test/test.proto
// DO NOT EDIT!
package my_test