diff --git a/src/messages.rs b/src/messages.rs index 826508e..e831550 100644 --- a/src/messages.rs +++ b/src/messages.rs @@ -493,9 +493,21 @@ where } }; - let mut buf = vec![0u8; len as usize - 4]; + let mut bytes = BytesMut::with_capacity(len as usize + 1); - match stream.read_exact(&mut buf).await { + bytes.put_u8(code); + bytes.put_i32(len); + + 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 + { Ok(_) => (), Err(_) => { return Err(Error::SocketError(format!( @@ -505,12 +517,6 @@ where } }; - let mut bytes = BytesMut::with_capacity(len as usize + 1); - - bytes.put_u8(code); - bytes.put_i32(len); - bytes.put_slice(&buf); - Ok(bytes) }