656297e1fe
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194698 From-SVN: r275691
43 lines
780 B
Go
43 lines
780 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.
|
|
|
|
// +build gofuzz
|
|
|
|
package json
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func Fuzz(data []byte) (score int) {
|
|
for _, ctor := range []func() interface{}{
|
|
func() interface{} { return new(interface{}) },
|
|
func() interface{} { return new(map[string]interface{}) },
|
|
func() interface{} { return new([]interface{}) },
|
|
} {
|
|
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
|
|
}
|