From 04cbdae47a19c4a396a22f488840565638c47c39 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Mon, 23 Jan 2012 20:29:47 +0100 Subject: [PATCH] Fix DS overflow when unpacking --- msg.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/msg.go b/msg.go index 72a18e1b..1abfb708 100644 --- a/msg.go +++ b/msg.go @@ -764,10 +764,6 @@ func unpackStructValue(val reflect.Value, msg []byte, off int) (off1 int, ok boo case "hex": // Rest of the RR is hex encoded, network order an issue here? rdlength := int(val.FieldByName("Hdr").FieldByName("Rdlength").Uint()) - if off+rdlength > lenmsg { - // too large - return lenmsg, false - } var consumed int switch val.Type().Name() { case "RR_DS": @@ -781,6 +777,10 @@ func unpackStructValue(val reflect.Value, msg []byte, off int) (off1 int, ok boo default: consumed = 0 // return len(msg), false? } + if off+rdlength-consumed > lenmsg { + println("dns: overflow when unpacking hex string") + return lenmsg, false + } s = hex.EncodeToString(msg[off : off+rdlength-consumed]) off += rdlength - consumed case "base64":