|
|
@@ -234,7 +234,11 @@ func parseAddrs(attrs uint, fn func(int, []byte) (int, Addr, error), b []byte) (
|
|
|
return nil, err
|
|
|
}
|
|
|
as[i] = a
|
|
|
- b = b[roundup(int(b[0])):]
|
|
|
+ l := roundup(int(b[0]))
|
|
|
+ if len(b) < l {
|
|
|
+ return nil, errMessageTooShort
|
|
|
+ }
|
|
|
+ b = b[l:]
|
|
|
case sysAF_INET, sysAF_INET6:
|
|
|
af = int(b[1])
|
|
|
a, err := parseInetAddr(af, b)
|
|
|
@@ -242,7 +246,11 @@ func parseAddrs(attrs uint, fn func(int, []byte) (int, Addr, error), b []byte) (
|
|
|
return nil, err
|
|
|
}
|
|
|
as[i] = a
|
|
|
- b = b[roundup(int(b[0])):]
|
|
|
+ l := roundup(int(b[0]))
|
|
|
+ if len(b) < l {
|
|
|
+ return nil, errMessageTooShort
|
|
|
+ }
|
|
|
+ b = b[l:]
|
|
|
default:
|
|
|
l, a, err := fn(af, b)
|
|
|
if err != nil {
|
|
|
@@ -262,7 +270,11 @@ func parseAddrs(attrs uint, fn func(int, []byte) (int, Addr, error), b []byte) (
|
|
|
return nil, err
|
|
|
}
|
|
|
as[i] = a
|
|
|
- b = b[roundup(int(b[0])):]
|
|
|
+ l := roundup(int(b[0]))
|
|
|
+ if len(b) < l {
|
|
|
+ return nil, errMessageTooShort
|
|
|
+ }
|
|
|
+ b = b[l:]
|
|
|
}
|
|
|
}
|
|
|
return as[:], nil
|