aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src
diff options
context:
space:
mode:
authorUbuntu <github@matdoes.dev>2022-08-31 18:48:51 +0000
committerUbuntu <github@matdoes.dev>2022-08-31 18:48:51 +0000
commitefb1f3f2d59af4dc44304d1f23678ac667c5cae2 (patch)
treed5f62931dbd97c99f3e39d6788e2b40742168503 /azalea-protocol/src
parent0085f8a565563ecb6a9f4f87be8b336157aa1e55 (diff)
downloadazalea-drasl-efb1f3f2d59af4dc44304d1f23678ac667c5cae2.tar.xz
fix panics
Diffstat (limited to 'azalea-protocol/src')
-rw-r--r--azalea-protocol/src/packets/game/clientbound_recipe_packet.rs24
-rwxr-xr-xazalea-protocol/src/read.rs13
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?;