blob: c0da64acf7775301be9ba2e20f615f5b0f1d3d88 [file] [log] [blame]
// 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
}