From 2c61900dd5efd81a5351513a20fa65580c8a6616 Mon Sep 17 00:00:00 2001 From: radhitya Date: Tue, 23 Jun 2026 05:36:25 +0700 Subject: make if error for unsupported query type --- internal/resolver/resolver.go | 8 ++++++-- internal/resolver/resolver_test.go | 21 +++++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) (limited to 'internal/resolver') 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{}) -- cgit v1.2.3