diff --git a/src/messages.rs b/src/messages.rs index 3fc84b5..c9ace4e 100644 --- a/src/messages.rs +++ b/src/messages.rs @@ -517,14 +517,18 @@ where bytes.resize(bytes.len() + len as usize - mem::size_of::(), b'0'); - match stream - .read_exact( - &mut bytes[mem::size_of::() + mem::size_of::() - ..mem::size_of::() + mem::size_of::() + len as usize - - mem::size_of::()], - ) - .await - { + let slice_start = mem::size_of::() + mem::size_of::(); + let slice_end = slice_start + len as usize - mem::size_of::(); + + // Avoids a panic + if slice_end < slice_start { + return Err(Error::SocketError(format!( + "Error reading message from socket - Code: {:?} - Length {:?}, Error: {:?}", + code, len, "Unexpected length value for message" + ))); + } + + match stream.read_exact(&mut bytes[slice_start..slice_end]).await { Ok(_) => (), Err(err) => { return Err(Error::SocketError(format!(