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