Skip to content

Commit 2d40354

Browse files
committed
fix ParseFromMsg to only parse Answer section
Closes #279 Made-with: Cursor
1 parent af07563 commit 2d40354

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

client.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -800,9 +800,7 @@ func (d *DNSData) ParseFromRR(rrs []dns.RR) error {
800800

801801
// ParseFromMsg and enrich data
802802
func (d *DNSData) ParseFromMsg(msg *dns.Msg) error {
803-
allRecords := append(msg.Answer, msg.Extra...)
804-
allRecords = append(allRecords, msg.Ns...)
805-
return d.ParseFromRR(allRecords)
803+
return d.ParseFromRR(msg.Answer)
806804
}
807805

808806
func (d *DNSData) ParseFromEnvelopeChan(envChan chan *dns.Envelope) error {

client_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,55 @@ func TestTrace(t *testing.T) {
171171
require.Nil(t, err, "could not resolve dns")
172172
}
173173

174+
func TestParseFromMsgIgnoresExtraAndNsSections(t *testing.T) {
175+
msg := new(dns.Msg)
176+
msg.SetQuestion("example.com.", dns.TypeA)
177+
178+
msg.Answer = []dns.RR{
179+
&dns.A{
180+
Hdr: dns.RR_Header{Name: "example.com.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 300},
181+
A: []byte{93, 184, 216, 34},
182+
},
183+
}
184+
185+
msg.Ns = []dns.RR{
186+
&dns.NS{
187+
Hdr: dns.RR_Header{Name: "example.com.", Rrtype: dns.TypeNS, Class: dns.ClassINET, Ttl: 3600},
188+
Ns: "ns1.example.com.",
189+
},
190+
&dns.SOA{
191+
Hdr: dns.RR_Header{Name: "example.com.", Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: 3600},
192+
Ns: "ns1.example.com.",
193+
Mbox: "admin.example.com.",
194+
Serial: 2024010101,
195+
Refresh: 7200,
196+
Retry: 3600,
197+
Expire: 1209600,
198+
Minttl: 300,
199+
},
200+
}
201+
202+
msg.Extra = []dns.RR{
203+
&dns.A{
204+
Hdr: dns.RR_Header{Name: "ns1.example.com.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 3600},
205+
A: []byte{198, 51, 100, 1},
206+
},
207+
&dns.AAAA{
208+
Hdr: dns.RR_Header{Name: "ns1.example.com.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 3600},
209+
AAAA: []byte{0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01},
210+
},
211+
}
212+
213+
d := &DNSData{}
214+
err := d.ParseFromMsg(msg)
215+
require.NoError(t, err)
216+
217+
assert.Equal(t, []string{"93.184.216.34"}, d.A, "only Answer A records should be parsed")
218+
assert.Empty(t, d.AAAA, "Additional AAAA glue records should not leak")
219+
assert.Empty(t, d.NS, "Authority NS records should not leak")
220+
assert.Empty(t, d.SOA, "Authority SOA records should not leak")
221+
}
222+
174223
func TestInternalIPDetectionWithHostsFile(t *testing.T) {
175224
CheckInternalIPs = true
176225
defer func() { CheckInternalIPs = false }()

0 commit comments

Comments
 (0)