in internal/encoding/decode.go [375:412]
func readArrayHeader(r *buffer.Buffer) (length int64, _ error) {
type_, err := readType(r)
if err != nil {
return 0, err
}
arrayLength := r.Len()
switch type_ {
case TypeCodeArray8:
buf, ok := r.Next(2)
if !ok {
return 0, errors.New("invalid length")
}
_ = buf[1]
size := int(buf[0])
if size > arrayLength-1 {
return 0, errors.New("invalid length")
}
length = int64(buf[1])
case TypeCodeArray32:
buf, ok := r.Next(8)
if !ok {
return 0, errors.New("invalid length")
}
_ = buf[7]
size := binary.BigEndian.Uint32(buf[:4])
if int(size) > arrayLength-4 {
return 0, fmt.Errorf("invalid length for type %02x", type_)
}
length = int64(binary.BigEndian.Uint32(buf[4:8]))
default:
return 0, fmt.Errorf("type code %#02x is not a recognized array type", type_)
}
return length, nil
}