1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
// Copyright ©2019 The Gonum 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
// +build gofuzz
package fuzz
import (
"bytes"
"os/exec"
"gonum.org/v1/gonum/graph/formats/dot"
)
// Fuzz implements the fuzzing function required for go-fuzz.
//
// See documentation at https://github.com/dvyukov/go-fuzz.
func Fuzz(data []byte) int {
// We don't accept empty data; the dot command does.
if len(data) == 0 || bytes.Equal(data, []byte{0}) {
return -1
}
// Check that dot accepts the input without complaint.
cmd := exec.Command("dot")
cmd.Stdin = bytes.NewReader(data)
err := cmd.Run()
if err != nil {
return 0
}
// Try to parse the data.
_, err = dot.Parse(bytes.NewReader(data))
if err != nil {
panic("could not parse good dot")
}
return 1
}
|