blob: 242e4b6359baf7653165d6ae3e9faae2c194a65d [file] [log] [blame]
Damien Neil26451c02019-12-19 14:17:21 -08001// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Damien Neil75f53c52019-12-20 10:33:37 -08005// Package textfuzz includes fuzzers for prototext.Marshal and prototext.Unmarshal.
Damien Neil26451c02019-12-19 14:17:21 -08006package textfuzz
7
8import (
9 "google.golang.org/protobuf/encoding/prototext"
10 "google.golang.org/protobuf/proto"
11
12 fuzzpb "google.golang.org/protobuf/internal/testprotos/fuzz"
13)
14
15// Fuzz is a fuzzer for proto.Marshal and proto.Unmarshal.
16func Fuzz(data []byte) (score int) {
17 m1 := &fuzzpb.Fuzz{}
18 if err := (prototext.UnmarshalOptions{
19 AllowPartial: true,
20 }).Unmarshal(data, m1); err != nil {
21 return 0
22 }
23 data1, err := prototext.MarshalOptions{
24 AllowPartial: true,
25 }.Marshal(m1)
26 if err != nil {
27 panic(err)
28 }
29 m2 := &fuzzpb.Fuzz{}
30 if err := (prototext.UnmarshalOptions{
31 AllowPartial: true,
32 }).Unmarshal(data1, m2); err != nil {
33 return 0
34 }
35 if !proto.Equal(m1, m2) {
36 panic("not equal")
37 }
38 return 1
39}