Unverified Commit 64ae47fd authored by Shounak Ray's avatar Shounak Ray Committed by GitHub
Browse files

fix: use checked arithmetic in TwoPartCodec to prevent integer overflow (#6959)


Signed-off-by: default avatarShounakRay <shounak@stanford.edu>
parent 987fdcb1
...@@ -55,7 +55,13 @@ impl Decoder for TwoPartCodec { ...@@ -55,7 +55,13 @@ impl Decoder for TwoPartCodec {
let body_len = cursor.get_u64() as usize; let body_len = cursor.get_u64() as usize;
let _checksum = cursor.get_u64(); let _checksum = cursor.get_u64();
let total_len = 24 + header_len + body_len; let total_len = 24usize
.checked_add(header_len)
.and_then(|n| n.checked_add(body_len))
.ok_or(TwoPartCodecError::MessageTooLarge(
usize::MAX,
self.max_message_size.unwrap_or(usize::MAX),
))?;
// Check if total_len exceeds max_message_size // Check if total_len exceeds max_message_size
if let Some(max_size) = self.max_message_size if let Some(max_size) = self.max_message_size
...@@ -109,7 +115,13 @@ impl Encoder<TwoPartMessage> for TwoPartCodec { ...@@ -109,7 +115,13 @@ impl Encoder<TwoPartMessage> for TwoPartCodec {
let header_len = item.header.len(); let header_len = item.header.len();
let body_len = item.data.len(); let body_len = item.data.len();
let total_len = 24 + header_len + body_len; // 24 bytes for lengths and checksum let total_len = 24usize
.checked_add(header_len)
.and_then(|n| n.checked_add(body_len))
.ok_or(TwoPartCodecError::MessageTooLarge(
usize::MAX,
self.max_message_size.unwrap_or(usize::MAX),
))?;
// Check if total_len exceeds max_message_size // Check if total_len exceeds max_message_size
if let Some(max_size) = self.max_message_size if let Some(max_size) = self.max_message_size
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment