1// 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 5// Package jsonfuzz includes fuzzers for protojson.Marshal and protojson.Unmarshal. 6package jsonfuzz 7 8import ( 9 "google.golang.org/protobuf/encoding/protojson" 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 := (protojson.UnmarshalOptions{ 19 AllowPartial: true, 20 }).Unmarshal(data, m1); err != nil { 21 return 0 22 } 23 data1, err := protojson.MarshalOptions{ 24 AllowPartial: true, 25 }.Marshal(m1) 26 if err != nil { 27 panic(err) 28 } 29 m2 := &fuzzpb.Fuzz{} 30 if err := (protojson.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} 40