From: Michael Hoisie Date: Sun, 18 Apr 2010 21:46:24 +0000 (-0700) Subject: net: fix bugs in packStructValue X-Git-Tag: weekly.2010-04-27~77 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=13f81feb31ab54fabc95b38764fd2d55079edd1f;p=gostls13.git 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 --- diff --git a/src/pkg/net/dnsmsg.go b/src/pkg/net/dnsmsg.go index adedcab993..5091896392 100644 --- a/src/pkg/net/dnsmsg.go +++ b/src/pkg/net/dnsmsg.go @@ -389,7 +389,7 @@ func packStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int, o msg[off] = byte(i >> 24) msg[off+1] = byte(i >> 16) msg[off+2] = byte(i >> 8) - msg[off+4] = byte(i) + msg[off+3] = byte(i) off += 4 case *reflect.StringValue: // There are multiple string encodings. @@ -633,13 +633,13 @@ func (dns *_DNS_Msg) Pack() (msg []byte, ok bool) { off, ok = packStruct(&question[i], msg, off) } 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++ { - off, ok = packStruct(ns[i], msg, off) + off, ok = packRR(ns[i], msg, off) } for i := 0; i < len(extra); i++ { - off, ok = packStruct(extra[i], msg, off) + off, ok = packRR(extra[i], msg, off) } if !ok { return nil, false