Skip to content

Commit

Permalink
encoding/json: add a Fuzz function
Browse files Browse the repository at this point in the history
Adds a sample Fuzz test function to package encoding/json following the
guidelines defined in #31309, based on
https://github.com/dvyukov/go-fuzz-corpus/blob/master/json/json.go

Fixes #31309
Updates #19109

Change-Id: I5fe04d9a5f41c0de339f8518dae30896ec14e356
Reviewed-on: https://go-review.googlesource.com/c/go/+/174058
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
  • Loading branch information
Romain Baugue authored and bradfitz committed Apr 29, 2019
1 parent 3cf1d77 commit 45ed3db
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions src/encoding/json/fuzz.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// 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.Println("m=%s\n", string(m))
panic(err)
}
}

return
}

0 comments on commit 45ed3db

Please sign in to comment.