summaryrefslogtreecommitdiff
path: root/internal/resolver
diff options
context:
space:
mode:
Diffstat (limited to 'internal/resolver')
-rw-r--r--internal/resolver/resolver.go8
-rw-r--r--internal/resolver/resolver_test.go21
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{})