Commit 13f81feb authored by Michael Hoisie's avatar Michael Hoisie Committed by Russ Cox

net: fix bugs in packStructValue

packStructValue was cutting off last byte of uint32
in _Dns_msg.Unpack, use packRR for rr types

R=rsc
CC=golang-dev
https://golang.org/cl/844048
parent 3cfa2c3d
...@@ -389,7 +389,7 @@ func packStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int, o ...@@ -389,7 +389,7 @@ func packStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int, o
msg[off] = byte(i >> 24) msg[off] = byte(i >> 24)
msg[off+1] = byte(i >> 16) msg[off+1] = byte(i >> 16)
msg[off+2] = byte(i >> 8) msg[off+2] = byte(i >> 8)
msg[off+4] = byte(i) msg[off+3] = byte(i)
off += 4 off += 4
case *reflect.StringValue: case *reflect.StringValue:
// There are multiple string encodings. // There are multiple string encodings.
...@@ -633,13 +633,13 @@ func (dns *_DNS_Msg) Pack() (msg []byte, ok bool) { ...@@ -633,13 +633,13 @@ func (dns *_DNS_Msg) Pack() (msg []byte, ok bool) {
off, ok = packStruct(&question[i], msg, off) off, ok = packStruct(&question[i], msg, off)
} }
for i := 0; i < len(answer); i++ { for i := 0; i < len(answer); i++ {
off, ok = packStruct(answer[i], msg, off) off, ok = packRR(answer[i], msg, off)
} }
for i := 0; i < len(ns); i++ { for i := 0; i < len(ns); i++ {
off, ok = packStruct(ns[i], msg, off) off, ok = packRR(ns[i], msg, off)
} }
for i := 0; i < len(extra); i++ { for i := 0; i < len(extra); i++ {
off, ok = packStruct(extra[i], msg, off) off, ok = packRR(extra[i], msg, off)
} }
if !ok { if !ok {
return nil, false return nil, false
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment