From 70c2243f7712e3a44d8d6ce8b6027babe50afa81 Mon Sep 17 00:00:00 2001 From: Evan Wies Date: Sun, 16 Apr 2023 13:23:55 -0400 Subject: [PATCH] Fix fatal error processing unexpected records (#1) by adding a type assertion guard. --- CHANGELOG.md | 4 +++- pkg/lookup/loopkup_srv.go | 29 +++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e5fdae..0977f84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,11 @@ Changelog ========= -## v0.4.0 (2023-04-12) +## v0.4.0 (2023-04-16) * Add `-a` and `-6` to check A/AAAA instead of SRV records + * Fix fatal error processing unexpected records (#1) + * Custom DNS (--dns) can now be specified without port (appends :53) ## v0.3.0 (2023-03-31) diff --git a/pkg/lookup/loopkup_srv.go b/pkg/lookup/loopkup_srv.go index 7d25079..2551269 100644 --- a/pkg/lookup/loopkup_srv.go +++ b/pkg/lookup/loopkup_srv.go @@ -69,22 +69,23 @@ func LookupSRVCustom(name string, dnsResolver string, recurse bool) ([]*dns.SRV, } var records []*dns.SRV for _, ans := range r.Answer { - srvRecord := *ans.(*dns.SRV) - if recurse && net.ParseIP(srvRecord.Target) == nil { - m2 := dns.Msg{} - m2.SetQuestion(srvRecord.Target, dns.TypeA) - m2.RecursionDesired = true - r2, _, err := c.Exchange(&m2, dnsResolver) - if err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - return nil, err - } - if len(r2.Answer) != 0 { - aRecord := r2.Answer[0].(*dns.A) - srvRecord.Target = aRecord.A.String() + if srvRecord, ok := ans.(*dns.SRV); ok && srvRecord != nil { + if recurse && net.ParseIP(srvRecord.Target) == nil { + m2 := dns.Msg{} + m2.SetQuestion(srvRecord.Target, dns.TypeA) + m2.RecursionDesired = true + r2, _, err := c.Exchange(&m2, dnsResolver) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + return nil, err + } + if len(r2.Answer) != 0 { + aRecord := r2.Answer[0].(*dns.A) + srvRecord.Target = aRecord.A.String() + } } + records = append(records, srvRecord) } - records = append(records, &srvRecord) } return records, nil }