Skip to content

Commit

Permalink
src: decoder: Fix: Discard higher invalid msg_id
Browse files Browse the repository at this point in the history
  • Loading branch information
RaulTrombin committed Apr 2, 2024
1 parent 5deb5c3 commit 5080b45
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use crate::message::{ProtocolMessage, HEADER};
#[derive(Debug)]
pub enum ParseError {
InvalidStartByte,
InvalidMessageId,
IncompleteData,
ChecksumError,
}
Expand Down Expand Up @@ -62,7 +63,15 @@ impl Decoder {
if self.buffer.len() == 6 {
self.message.payload_length =
u16::from_le_bytes([self.buffer[0], self.buffer[1]]);
self.message.message_id = u16::from_le_bytes([self.buffer[2], self.buffer[3]]);

let msg_id = u16::from_le_bytes([self.buffer[2], self.buffer[3]]);
const INVALID_MSG_MASK: u16 = 0b1111000000000000;
if msg_id & INVALID_MSG_MASK != 0 {
self.reset();
return DecoderResult::Error(ParseError::InvalidMessageId)
}
self.message.message_id = msg_id;

self.message.src_device_id = self.buffer[4];
self.message.dst_device_id = self.buffer[5];
self.state = DecoderState::ReadingPayload;
Expand Down

0 comments on commit 5080b45

Please sign in to comment.