42 lines
725 B
Go
42 lines
725 B
Go
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build gofuzz
|
|
|
|
package json
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func Fuzz(data []byte) (score int) {
|
|
for _, ctor := range []func() any{
|
|
func() any { return new(any) },
|
|
func() any { return new(map[string]any) },
|
|
func() any { return new([]any) },
|
|
} {
|
|
v := ctor()
|
|
err := Unmarshal(data, v)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
score = 1
|
|
|
|
m, err := Marshal(v)
|
|
if err != nil {
|
|
fmt.Printf("v=%#v\n", v)
|
|
panic(err)
|
|
}
|
|
|
|
u := ctor()
|
|
err = Unmarshal(m, u)
|
|
if err != nil {
|
|
fmt.Printf("v=%#v\n", v)
|
|
fmt.Printf("m=%s\n", m)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|