fix: parsing

This commit is contained in:
Strix 2023-10-15 18:06:34 +02:00
parent 913ae5e74a
commit 3eece7ecd9
No known key found for this signature in database
GPG key ID: 49B2E37B8915B774
5 changed files with 105 additions and 104 deletions

View file

@ -9,13 +9,14 @@ impl TryFrom<Vec<u8>> for RawPacket {
if data.len() < PACKET_HEADER_SIZE {
return Err(io::Error::new(io::ErrorKind::InvalidData, "Can't parse data into RawPacket"))
}
let data_length = u16::from_be_bytes([data[0x12], data[0x13]]) as usize;
if data.len() < 0x14 + data_length + 4 {
let data_length = (((data[0x12] as u16) << 8) | data[0x13] as u16) as usize;
if data.len() < 0x14 + data_length {
return Err(io::Error::new(io::ErrorKind::InvalidData, "Can't parse data into RawPacket"))
}
let checksum = as_u32_be(data[(data.len() - 5)..].as_ref());
if checksum != crc32fast::hash(data[..(data.len() - 4)].as_ref()) {
return Err(io::Error::new(io::ErrorKind::InvalidData, "Checksum does not match"))
let checksum = as_u32_be(data[(data.len() - 4)..].as_ref());
let built_checksum = crc32fast::hash(data[..(data.len() - 4)].as_ref());
if checksum != built_checksum {
return Err(io::Error::new(io::ErrorKind::InvalidData, format!("Checksum does not match {checksum:X?} != {built_checksum:X?}")))
}
Ok(RawPacket {
version: data[0],
@ -25,7 +26,7 @@ impl TryFrom<Vec<u8>> for RawPacket {
reply_to: as_u32_be(data[0x0D..0x11].as_ref()),
command: data[0x11],
data_length,
data: data[0x14..data_length].to_vec(),
data: data[0x14..(0x14 + data_length)].to_vec(),
checksum,
})
}