mirror of
https://github.com/miekg/dns.git
synced 2025-12-18 02:01:38 +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 {
|
if val.Field(i).Len() == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
var bitmapbyte uint16
|
off1 := off
|
||||||
for j := 0; j < val.Field(i).Len(); j++ {
|
for j := 0; j < val.Field(i).Len(); j++ {
|
||||||
serv := uint16((fv.Index(j).Uint()))
|
serv := int(fv.Index(j).Uint())
|
||||||
bitmapbyte = uint16(serv / 8)
|
if off+serv/8+1 > len(msg) {
|
||||||
if int(bitmapbyte) > lenmsg {
|
return len(msg), &Error{err: "overflow packing wks"}
|
||||||
return lenmsg, &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
|
case `dns:"nsec"`: // NSEC/NSEC3
|
||||||
// This is the uint16 type bitmap
|
// This is the uint16 type bitmap
|
||||||
if val.Field(i).Len() == 0 {
|
if val.Field(i).Len() == 0 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user