From efb1f3f2d59af4dc44304d1f23678ac667c5cae2 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 31 Aug 2022 18:48:51 +0000 Subject: fix panics --- azalea-protocol/src/read.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'azalea-protocol/src/read.rs') diff --git a/azalea-protocol/src/read.rs b/azalea-protocol/src/read.rs index 077e1297..85340f5a 100755 --- a/azalea-protocol/src/read.rs +++ b/azalea-protocol/src/read.rs @@ -50,6 +50,8 @@ pub enum FrameSplitterError { #[from] source: std::io::Error, }, + #[error("Packet is longer than {max} bytes (is {size})")] + BadLength { max: u32, size: u32 }, } async fn frame_splitter(mut stream: &mut R) -> Result, FrameSplitterError> @@ -57,7 +59,16 @@ where R: AsyncRead + std::marker::Unpin + std::marker::Send, { // Packet Length - let length = read_varint_async(&mut stream).await?; + let length = read_varint_async(&mut stream).await? as u32; + + let max_length: u32 = 2u32.pow(20u32); // 1mb, arbitrary + if length > max_length { + // minecraft *probably* won't send packets bigger than this + return Err(FrameSplitterError::BadLength { + max: max_length, + size: length, + }); + } let mut buf = vec![0; length as usize]; stream.read_exact(&mut buf).await?; -- cgit v1.2.3