Fix bug with buffer sizes

This commit is contained in:
John Doty 2022-10-12 17:03:12 -07:00
parent 68cca8cb7d
commit ea2ec7a257
2 changed files with 5 additions and 4 deletions

View file

@ -211,7 +211,7 @@ impl<T: AsyncWrite + Unpin> MessageWriter<T> {
self.writer self.writer
.write_u32(buffer.len().try_into().expect("Message too large")) .write_u32(buffer.len().try_into().expect("Message too large"))
.await?; .await?;
self.writer.write_buf(&mut buffer).await?; self.writer.write_all(&mut buffer).await?;
self.writer.flush().await?; self.writer.flush().await?;
Ok(()) Ok(())
} }
@ -227,8 +227,8 @@ impl<T: AsyncRead + Unpin> MessageReader<T> {
} }
pub async fn read(self: &mut Self) -> Result<Message> { pub async fn read(self: &mut Self) -> Result<Message> {
let frame_length = self.reader.read_u32().await?; let frame_length = self.reader.read_u32().await?;
let mut data = BytesMut::with_capacity(frame_length.try_into().unwrap()); let mut data = vec![0; frame_length.try_into().unwrap()];
self.reader.read_buf(&mut data).await?; self.reader.read_exact(&mut data).await?;
let mut cursor = Cursor::new(&data[..]); let mut cursor = Cursor::new(&data[..]);
Message::decode(&mut cursor) Message::decode(&mut cursor)
@ -297,6 +297,7 @@ mod message_tests {
}, },
])); ]));
assert_round_trip(Data(0x1234567890123456, vec![1, 2, 3, 4].into())); assert_round_trip(Data(0x1234567890123456, vec![1, 2, 3, 4].into()));
assert_round_trip(Data(0x123, vec![0; u16::max_value().into()].into()));
} }
#[test] #[test]

View file

@ -10,7 +10,7 @@ use crossterm::{
EnterAlternateScreen, LeaveAlternateScreen, EnterAlternateScreen, LeaveAlternateScreen,
}, },
}; };
use log::{Level, LevelFilter, Metadata, Record}; use log::{Level, Metadata, Record};
use std::collections::vec_deque::VecDeque; use std::collections::vec_deque::VecDeque;
use std::io::{stdout, Write}; use std::io::{stdout, Write};
use tokio::sync::mpsc; use tokio::sync::mpsc;