github.com/sagernet/sing@v0.4.0-beta.19.0.20240518125136-f67a0988a636/common/json/internal/contextjson_120/fuzz.go (about)

     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  //go:build gofuzz
     6  
     7  package json
     8  
     9  import (
    10  	"fmt"
    11  )
    12  
    13  func Fuzz(data []byte) (score int) {
    14  	for _, ctor := range []func() any{
    15  		func() any { return new(any) },
    16  		func() any { return new(map[string]any) },
    17  		func() any { return new([]any) },
    18  	} {
    19  		v := ctor()
    20  		err := Unmarshal(data, v)
    21  		if err != nil {
    22  			continue
    23  		}
    24  		score = 1
    25  
    26  		m, err := Marshal(v)
    27  		if err != nil {
    28  			fmt.Printf("v=%#v\n", v)
    29  			panic(err)
    30  		}
    31  
    32  		u := ctor()
    33  		err = Unmarshal(m, u)
    34  		if err != nil {
    35  			fmt.Printf("v=%#v\n", v)
    36  			fmt.Printf("m=%s\n", m)
    37  			panic(err)
    38  		}
    39  	}
    40  
    41  	return
    42  }