|
|
@@ -0,0 +1,40 @@
|
|
|
+// Copyright 2019 The Go Authors. All rights reserved.
|
|
|
+// Use of this source code is governed by a BSD-style
|
|
|
+// license that can be found in the LICENSE file.
|
|
|
+
|
|
|
+// +build gofuzz
|
|
|
+
|
|
|
+// Package wire includes a fuzzer for the wire marshaler and unmarshaler.
|
|
|
+package wire
|
|
|
+
|
|
|
+import (
|
|
|
+ "google.golang.org/protobuf/proto"
|
|
|
+
|
|
|
+ testpb "google.golang.org/protobuf/internal/testprotos/test"
|
|
|
+)
|
|
|
+
|
|
|
+// Fuzz is a fuzzer for proto.Marshal and proto.Unmarshal.
|
|
|
+func Fuzz(data []byte) int {
|
|
|
+ score := 0
|
|
|
+ for _, newf := range []func() proto.Message{
|
|
|
+ func() proto.Message { return &testpb.TestAllTypes{} },
|
|
|
+ } {
|
|
|
+ m1 := newf()
|
|
|
+ if err := proto.Unmarshal(data, m1); err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ score = 1
|
|
|
+ data1, err := proto.Marshal(m1)
|
|
|
+ if err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ m2 := newf()
|
|
|
+ if err := proto.Unmarshal(data1, m2); err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ if !proto.Equal(m1, m2) {
|
|
|
+ panic("not equal")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return score
|
|
|
+}
|