diff options
Diffstat (limited to 'internal/resolver')
| -rw-r--r-- | internal/resolver/resolver.go | 8 | ||||
| -rw-r--r-- | internal/resolver/resolver_test.go | 21 |
2 files changed, 23 insertions, 6 deletions
diff --git a/internal/resolver/resolver.go b/internal/resolver/resolver.go index c7a0694..3cdf846 100644 --- a/internal/resolver/resolver.go +++ b/internal/resolver/resolver.go @@ -11,8 +11,9 @@ import ( ) var ( - ErrMaxDelegations = errors.New("max delegations exceeded") - ErrNoServers = errors.New("no nameservers available") + ErrMaxDelegations = errors.New("max delegations exceeded") + ErrNoServers = errors.New("no nameservers available") + ErrUnsupportedType = errors.New("unsupported query type") ) type Resolver struct { @@ -251,6 +252,9 @@ func (r *Resolver) exchangeWithRetries(ctx context.Context, servers []string, qname string, qtype uint16, rd bool) (*dns.Msg, error) { msg := dns.NewMsg(qname, qtype) + if msg == nil { + return nil, fmt.Errorf("%w %d for %s", ErrUnsupportedType, qtype, qname) + } msg.UDPSize = 4096 msg.RecursionDesired = rd diff --git a/internal/resolver/resolver_test.go b/internal/resolver/resolver_test.go index daa8a98..3c44cb4 100644 --- a/internal/resolver/resolver_test.go +++ b/internal/resolver/resolver_test.go @@ -1,17 +1,30 @@ package resolver import ( + "codeberg.org/miekg/dns" + "codeberg.org/miekg/dns/dnsutil" + "codeberg.org/miekg/dns/rdata" "context" + "errors" "io" "net/netip" "testing" "time" - - "codeberg.org/miekg/dns" - "codeberg.org/miekg/dns/dnsutil" - "codeberg.org/miekg/dns/rdata" ) +func TestLookupUnknownType(t *testing.T) { + r := New(WithForwarders([]string{"127.0.0.1:1"}), WithTimeout(50*time.Millisecond)) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + _, err := r.Lookup(ctx, "example.com.", 0xaa58) + if err == nil { + t.Fatal("expected error for unsupported qtype") + } + if !errors.Is(err, ErrUnsupportedType) { + t.Fatalf("expected ErrUnsupportedType, got %v", err) + } +} func startTestServer(t *testing.T, addr string, handler dns.Handler) *dns.Server { t.Helper() ready := make(chan struct{}) |
