tsenart/vegeta · error
must specify at least resolver address
Error message
must specify at least resolver address
What it means
NewResolver in internal/resolver returns this error when given an empty address list. A custom resolver needs at least one DNS server address to replace net.DefaultResolver's behavior.
Source
Thrown at internal/resolver/resolver.go:26
"strconv"
"strings"
"sync/atomic"
)
type resolver struct {
addrs []string
dialer *net.Dialer
idx uint64
}
// NewResolver - create a new instance of a dns resolver for plugging
// into net.DefaultResolver. Addresses should be a list of
// ip addrs and optional port numbers, separated by colon.
// For example: 1.2.3.4:53 and 1.2.3.4 are both valid. In the absence
// of a port number, 53 will be used instead.
func NewResolver(addrs []string) (*net.Resolver, error) {
if len(addrs) == 0 {
return nil, errors.New("must specify at least resolver address")
}
cleanAddrs, err := normalizeAddrs(addrs)
if err != nil {
return nil, err
}
return &net.Resolver{
PreferGo: true,
Dial: (&resolver{addrs: cleanAddrs, dialer: &net.Dialer{}}).dial,
}, nil
}
func normalizeAddrs(addrs []string) ([]string, error) {
normal := make([]string, len(addrs))
for i, addr := range addrs {
// if addr has no port, give it 53
if !strings.Contains(addr, ":") {
addr += ":53"View on GitHub (pinned to cf58112690)
Solutions
- Pass at least one address, e.g. NewResolver([]string{"8.8.8.8:53"}).
- Trim and check the addresses input before calling NewResolver and fall back to net.DefaultResolver if empty.
- Fix the flag/config parsing so an empty value doesn't produce a nil/empty slice passed as non-optional.
Example fix
// before
r, err := resolver.NewResolver(addrs) // addrs == nil
// after
if len(addrs) == 0 { addrs = []string{"8.8.8.8:53"} }
r, err := resolver.NewResolver(addrs) Defensive patterns
Strategy: validation
Validate before calling
if len(addrs) == 0 {
addrs = nil // fall back to net.DefaultResolver
}
var r *net.Resolver
if len(addrs) > 0 {
r, err = resolver.NewResolver(addrs)
} Prevention
- Default resolver flags to a sane value like 8.8.8.8:53
- Trim/split flag strings carefully to avoid empty slices
- Fall back to net.DefaultResolver when the list is empty
When it happens
Trigger: Calling resolver.NewResolver(nil) or NewResolver([]string{}) — e.g. constructing an attacker with resolver addresses sourced from an empty flag/env value.
Common situations: Empty `-dns` style flag, config file with no resolver entries, or splitting an empty string into a zero-length slice.
Understand the failure class
Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.
Related errors
- rate frequency and time unit must be bigger than zero
- lttb: min threshold is 3
- ErrNoTargets
- ErrNoMethod
- ErrNoURL
AI-assisted analysis of tsenart/vegeta@cf58112690 (2026-08-31).
Data as JSON: /api/errors/c3b135e5ab339c3c.
Report an issue: GitHub.