coredns/plugin/pkg/fuzz/do.go
Miek Gieben 62451fd3eb
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>
2019-08-24 18:13:47 +00:00

36 lines
909 B
Go

// Package fuzz contains functions that enable fuzzing of plugins.
package fuzz
import (
"context"
"github.com/coredns/coredns/plugin"
"github.com/coredns/coredns/plugin/test"
"github.com/miekg/dns"
)
// Do will fuzz p - used by gofuzz. See Makefile.fuzz for comments and context.
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 {
return 0 // plugin will never be called when this happens.
}
// If the data unpack into a dns msg, but does not have a proper question section discard it.
// The server parts make sure this is true before calling the plugins; mimic this behavior.
if len(r.Question) == 0 {
return 0
}
if _, err := p.ServeDNS(ctx, &test.ResponseWriter{}, r); err != nil {
return 1
}
return 0
}