fn read_utf8(br: &mut BitReader) -> DecoderResult<u64> {
let byte = br.read(8)? as u8;
let len = (!byte).leading_zeros();
- if (len == 1) || (len > 5) {
+ if (len == 1) || (len > 7) {
return Err(DecoderError::InvalidData);
}
if len > 1 {
return Ok(u32::from(src[0]));
}
let len = (!src[0]).leading_zeros() as usize;
- validate!(len != 1 && len <= 5 && src.len() >= len);
- let mut val = u32::from(src[0] & 0x1F);
+ validate!(len != 1 && len <= 7 && src.len() >= len);
+ let mut val = u32::from(src[0] << len >> len);
for byte in src.iter().take(len).skip(1) {
validate!((*byte & 0xC0) == 0x80);
val = (val << 6) | u32::from(*byte & 0x3F);