mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 07:06:54 +08:00
41 lines
872 B
Go
41 lines
872 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.
|
|
|
|
//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
|
|
}
|