fuzz: move fuzz_target from oss-fuzz (#861)
This commit is contained in:
@@ -77,7 +77,7 @@ cover() {
|
||||
|
||||
pushd "$dir"
|
||||
go test -covermode=atomic -coverpkg=./... -coverprofile=coverage.out.tmp ./...
|
||||
cat coverage.out.tmp | grep -v testsuite | grep -v tomltestgen | grep -v gotoml-test-decoder > coverage.out
|
||||
cat coverage.out.tmp | grep -v fuzz | grep -v testsuite | grep -v tomltestgen | grep -v gotoml-test-decoder > coverage.out
|
||||
go tool cover -func=coverage.out
|
||||
popd
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
//go:build go1.18 || go1.19 || go1.20
|
||||
// +build go1.18 go1.19 go1.20
|
||||
|
||||
package ossfuzz
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/pelletier/go-toml/v2"
|
||||
)
|
||||
|
||||
func FuzzToml(data []byte) int {
|
||||
if len(data) >= 10240 {
|
||||
return 0
|
||||
}
|
||||
|
||||
if strings.Contains(string(data), "nan") {
|
||||
return 0
|
||||
}
|
||||
|
||||
var v interface{}
|
||||
err := toml.Unmarshal(data, &v)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
encoded, err := toml.Marshal(v)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("failed to marshal unmarshaled document: %s", err))
|
||||
}
|
||||
|
||||
var v2 interface{}
|
||||
err = toml.Unmarshal(encoded, &v2)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("failed round trip: %s", err))
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(v, v2) {
|
||||
panic(fmt.Sprintf("not equal: %#+v %#+v", v, v2))
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
Reference in New Issue
Block a user