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// +build gofuzz
6
7package json
8
9import (
10	"fmt"
11)
12
13func Fuzz(data []byte) (score int) {
14	for _, ctor := range []func() interface{}{
15		func() interface{} { return new(interface{}) },
16		func() interface{} { return new(map[string]interface{}) },
17		func() interface{} { return new([]interface{}) },
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}
43