Files
gonum/graph/formats/dot/fuzz/fuzz.go
Dan Kortschak 3b3c374240 graph/formats/dot/fuzz: add fuzzer function and corpus
The fuzz corpus was seeded with a small number of hand crafted examples
and occasionally augmented manually by identifying code paths that were
not touched and adding text to target those. Then iterating.
2019-03-07 19:50:19 +10:30

40 lines
854 B
Go

// 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.
// +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
}