From a67707609b7acfac329394b5e86bfb6d684d092e Mon Sep 17 00:00:00 2001 From: water bottle <76277026+RealMaoZedong@users.noreply.github.com> Date: Tue, 21 May 2024 09:12:19 +1000 Subject: [PATCH] Fix compression in read_packet --- src/lib.rs | 71 +++++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index f0d7dcf..5761564 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -410,42 +410,41 @@ impl MinecraftConnection { Err(_) => { return Err(ProtocolError::ReadError) }, }; - Ok(Packet::from_bytes(packet_id, &data)) - } else { - let packet_length = self.read_usize_varint()?; - let data_length = self.read_usize_varint()?; - - if data_length == 0 { - let mut data: Vec = vec![0; packet_length - 1]; - match self.stream.read_exact(&mut data) { - Ok(i) => i, - Err(_) => { return Err(ProtocolError::ReadError) }, - }; - - let mut data_buf = ByteBuffer::from_vec(decompress_zlib(&data)?); - - let packet_id = match data_buf.read_u8_varint() { - Ok(i) => i, - Err(_) => { return Err(ProtocolError::VarIntError) }, - }; - let mut data: Vec = vec![0; data_length - 1]; - match data_buf.read_exact(&mut data) { - Ok(i) => i, - Err(_) => { return Err(ProtocolError::ReadError) }, - }; - - Ok(Packet::from_bytes(packet_id, &data)) - } else { - let packet_id = self.read_u8_varint()?; - let mut data: Vec = vec![0; data_length - 1]; - match self.stream.read_exact(&mut data) { - Ok(i) => i, - Err(_) => { return Err(ProtocolError::ReadError) }, - }; - - Ok(Packet::from_bytes(packet_id, &data)) - } + return Ok(Packet::from_bytes(packet_id, &data)) } + let packet_length = self.read_usize_varint()?; + let data_length = self.read_usize_varint()?; + + if data_length == 0 { + let packet_id = self.read_u8_varint()?; + let mut data: Vec = vec![0; packet_length - 2]; + match self.stream.read_exact(&mut data) { + Ok(i) => i, + Err(_) => { return Err(ProtocolError::ReadError) }, + }; + + return Ok(Packet::from_bytes(packet_id, &data)) + } + + let mut data: Vec = vec![0; packet_length - 1]; + match self.stream.read_exact(&mut data) { + Ok(i) => i, + Err(_) => { return Err(ProtocolError::ReadError) }, + }; + + let mut data_buf = ByteBuffer::from_vec(decompress_zlib(&data)?); + + let packet_id = match data_buf.read_u8_varint() { + Ok(i) => i, + Err(_) => { return Err(ProtocolError::VarIntError) }, + }; + let mut data: Vec = vec![0; data_length - 1]; + match data_buf.read_exact(&mut data) { + Ok(i) => i, + Err(_) => { return Err(ProtocolError::ReadError) }, + }; + + Ok(Packet::from_bytes(packet_id, &data)) } pub fn write_packet(&mut self, packet: &Packet) -> Result<(), ProtocolError> { @@ -553,4 +552,4 @@ fn decompress_zlib(bytes: &[u8]) -> Result, ProtocolError> { pub type MCConn = MinecraftConnection; -pub type MCConnTcp = MinecraftConnection; \ No newline at end of file +pub type MCConnTcp = MinecraftConnection;