From 34f43d398bca1e6d6f9b8eabf323cd8b0bed85a6 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sun, 9 Nov 2014 16:17:06 +0000 Subject: [PATCH] Stop parsing when hitting rdlen Stop parsing these records when we hit rdlen. --- msg.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/msg.go b/msg.go index 5bbc504b..2ae95fcb 100644 --- a/msg.go +++ b/msg.go @@ -1016,24 +1016,24 @@ func unpackStructValue(val reflect.Value, msg []byte, off int) (off1 int, err er // do nothing? off = off1 + int(optlen) } - if off < rdend { + if off < lenrd { goto Option } fv.Set(reflect.ValueOf(edns)) case `dns:"a"`: - if off == lenmsg { + if off == lenrd { break // dyn. update } - if off+net.IPv4len > rdend || off+net.IPv4len > lenmsg { + if off+net.IPv4len > lenrd || off+net.IPv4len > lenmsg { return lenmsg, &Error{err: "overflow unpacking a"} } fv.Set(reflect.ValueOf(net.IPv4(msg[off], msg[off+1], msg[off+2], msg[off+3]))) off += net.IPv4len case `dns:"aaaa"`: - if off == rdend { + if off == lenrd { break } - if off+net.IPv6len > rdend || off+net.IPv6len > lenmsg { + if off+net.IPv6len > lenrd || off+net.IPv6len > lenmsg { return lenmsg, &Error{err: "overflow unpacking aaaa"} } fv.Set(reflect.ValueOf(net.IP{msg[off], msg[off+1], msg[off+2], msg[off+3], msg[off+4],