...

Source file src/google.golang.org/protobuf/internal/fuzz/jsonfuzz/fuzz.go

Documentation: google.golang.org/protobuf/internal/fuzz/jsonfuzz

     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.
     6  package jsonfuzz
     7  
     8  import (
     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.
    16  func 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  

View as plain text