mirror of
https://github.com/miekg/dns.git
synced 2025-12-15 16:51:48 +01:00
packStructValue: rewrite dns:"wks" packing which was writing out of bounds
This commit is contained in:
parent
0df69faa6e
commit
77aa064ef9
17
msg.go
17
msg.go
@ -750,17 +750,18 @@ func packStructValue(val reflect.Value, msg []byte, off int, compression map[str
|
||||
if val.Field(i).Len() == 0 {
|
||||
break
|
||||
}
|
||||
var bitmapbyte uint16
|
||||
off1 := off
|
||||
for j := 0; j < val.Field(i).Len(); j++ {
|
||||
serv := uint16((fv.Index(j).Uint()))
|
||||
bitmapbyte = uint16(serv / 8)
|
||||
if int(bitmapbyte) > lenmsg {
|
||||
return lenmsg, &Error{err: "overflow packing wks"}
|
||||
serv := int(fv.Index(j).Uint())
|
||||
if off+serv/8+1 > len(msg) {
|
||||
return len(msg), &Error{err: "overflow packing wks"}
|
||||
}
|
||||
msg[off+serv/8] |= byte(1 << (7 - uint(serv%8)))
|
||||
if off+serv/8+1 > off1 {
|
||||
off1 = off + serv/8 + 1
|
||||
}
|
||||
bit := uint16(serv) - bitmapbyte*8
|
||||
msg[bitmapbyte] = byte(1 << (7 - bit))
|
||||
}
|
||||
off += int(bitmapbyte)
|
||||
off = off1
|
||||
case `dns:"nsec"`: // NSEC/NSEC3
|
||||
// This is the uint16 type bitmap
|
||||
if val.Field(i).Len() == 0 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user