fuzzing: allow setup function to be called (#3175)

This allows to fuzzing of more interesting targets that require setup.

Signed-off-by: Miek Gieben <miek@miek.nl>
This commit is contained in:
Miek Gieben
2019-08-24 18:13:47 +00:00
committed by GitHub
parent 59e74eb15d
commit 62451fd3eb
7 changed files with 21 additions and 6 deletions

View File

@@ -11,7 +11,12 @@ import (
)
// Do will fuzz p - used by gofuzz. See Makefile.fuzz for comments and context.
func Do(p plugin.Handler, data []byte) int {
func Do(p plugin.Handler, fn SetupFunc, data []byte) int {
if fn != nil {
if err := fn(); err != nil {
panic("fuzz: " + err.Error())
}
}
ctx := context.TODO()
r := new(dns.Msg)
if err := r.Unpack(data); err != nil {

10
plugin/pkg/fuzz/setup.go Normal file
View File

@@ -0,0 +1,10 @@
package fuzz
// SetupFunc can be given to Do to perform a one time setup of the fuzzing
// environment. This function is called on every fuzz, it is your
// responsibility to make it idempotent. If SetupFunc returns an error, panic
// is called with that error.
//
// There isn't a ShutdownFunc, because fuzzing is supposed to be run for a long
// time and there isn't any hook to call it from.
type SetupFunc func() error