diff options
| author | Ubuntu <github@matdoes.dev> | 2022-08-31 18:48:51 +0000 |
|---|---|---|
| committer | Ubuntu <github@matdoes.dev> | 2022-08-31 18:48:51 +0000 |
| commit | efb1f3f2d59af4dc44304d1f23678ac667c5cae2 (patch) | |
| tree | d5f62931dbd97c99f3e39d6788e2b40742168503 /azalea-protocol/src | |
| parent | 0085f8a565563ecb6a9f4f87be8b336157aa1e55 (diff) | |
| download | azalea-drasl-efb1f3f2d59af4dc44304d1f23678ac667c5cae2.tar.xz | |
fix panics
Diffstat (limited to 'azalea-protocol/src')
| -rw-r--r-- | azalea-protocol/src/packets/game/clientbound_recipe_packet.rs | 24 | ||||
| -rwxr-xr-x | azalea-protocol/src/read.rs | 13 |
2 files changed, 14 insertions, 23 deletions
diff --git a/azalea-protocol/src/packets/game/clientbound_recipe_packet.rs b/azalea-protocol/src/packets/game/clientbound_recipe_packet.rs index 05e96f69..29ad5800 100644 --- a/azalea-protocol/src/packets/game/clientbound_recipe_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_recipe_packet.rs @@ -1,8 +1,6 @@ -use azalea_buf::{BufReadError, McBuf}; -use azalea_buf::{McBufReadable, McBufWritable, Readable, Writable}; +use azalea_buf::McBuf; use azalea_core::ResourceLocation; use packet_macros::ClientboundGamePacket; -use std::io::{Read, Write}; #[derive(Clone, Debug, McBuf, ClientboundGamePacket)] pub struct ClientboundRecipePacket { @@ -27,27 +25,9 @@ pub struct RecipeBookSettings { pub smoker_filtering_craftable: bool, } -#[derive(Clone, Debug, Copy)] +#[derive(Clone, Debug, Copy, McBuf)] pub enum State { Init = 0, Add = 1, Remove = 2, } - -impl McBufWritable for State { - fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - buf.write_varint(*self as i32)?; - Ok(()) - } -} -impl McBufReadable for State { - fn read_from(buf: &mut impl Read) -> Result<Self, BufReadError> { - let state = buf.read_varint()?; - Ok(match state { - 0 => State::Init, - 1 => State::Add, - 2 => State::Remove, - _ => panic!("Invalid state: {}", state), - }) - } -} 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<R: ?Sized>(mut stream: &mut R) -> Result<Vec<u8>, 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?; |
