Merge commit 'eb28b618cb4b8a7b8d975a0d19134d8351e5460a'

This commit is contained in:
Miek Gieben 2013-01-27 17:18:35 +01:00
commit 7f1aa12f83
2 changed files with 19 additions and 7 deletions

25
edns.go
View File

@ -248,7 +248,8 @@ func (e *EDNS0_SUBNET) pack() ([]byte, error) {
} }
func (e *EDNS0_SUBNET) unpack(b []byte) { func (e *EDNS0_SUBNET) unpack(b []byte) {
if len(b) < 8 { lb := len(b)
if lb < 4 {
return return
} }
e.Family, _ = unpackUint16(b, 0) e.Family, _ = unpackUint16(b, 0)
@ -256,15 +257,25 @@ func (e *EDNS0_SUBNET) unpack(b []byte) {
e.SourceScope = b[3] e.SourceScope = b[3]
switch e.Family { switch e.Family {
case 1: case 1:
if len(b) == 8 { addr := make([]byte, 4)
e.Address = net.IPv4(b[4], b[5], b[6], b[7]) for i := 0; i < int(e.SourceNetmask/8); i++ {
if 4+i > len(b) {
break
}
addr[i] = b[4+i]
} }
e.Address = net.IPv4(addr[0], addr[1], addr[2], addr[3])
case 2: case 2:
if len(b) == 20 { addr := make([]byte, 16)
e.Address = net.IP{b[4], b[4+1], b[4+2], b[4+3], b[4+4], for i := 0; i < int(e.SourceNetmask/8); i++ {
b[4+5], b[4+6], b[4+7], b[4+8], b[4+9], b[4+10], if 4+i > len(b) {
b[4+11], b[4+12], b[4+13], b[4+14], b[4+15]} break
}
addr[i] = b[4+i]
} }
e.Address = net.IP{addr[0], addr[1], addr[2], addr[3], addr[4],
addr[5], addr[6], addr[7], addr[8], addr[9], addr[10],
addr[11], addr[12], addr[13], addr[14], addr[15]}
} }
return return
} }

View File

@ -669,6 +669,7 @@ func (rr *AAAA) Len() int {
return rr.Hdr.Len() + net.IPv6len return rr.Hdr.Len() + net.IPv6len
} }
type LOC struct { type LOC struct {
Hdr RR_Header Hdr RR_Header
Version uint8 Version uint8