From 0bb1d22b3f3e8f67cc1bca943de975f5dd59785f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20Buga?= Date: Tue, 21 Nov 2023 09:29:06 +0100 Subject: [PATCH] Fix using the entire available buffer --- src/response/chunked.rs | 2 +- src/response/mod.rs | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/response/chunked.rs b/src/response/chunked.rs index 47f00b7..e786319 100644 --- a/src/response/chunked.rs +++ b/src/response/chunked.rs @@ -156,7 +156,7 @@ where }; let mut len = 0; - while len < reader.raw_body.buffer.buffer.len() { + while !reader.raw_body.buffer.buffer.is_empty() { // Read some let read = reader.fill_buf().await?.len(); len += read; diff --git a/src/response/mod.rs b/src/response/mod.rs index 573d181..90f24db 100644 --- a/src/response/mod.rs +++ b/src/response/mod.rs @@ -604,6 +604,21 @@ mod tests { assert!(conn.is_exhausted()); } + #[tokio::test] + async fn can_read_to_end_into_a_small_buffer() { + let mut conn = FakeSingleReadConnection::new( + b"HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n5\r\nHELLO\r\n6\r\n WORLD\r\n1\r\n \r\n5\r\nHELLO\r\n6\r\n WORLD\r\n1\r\n \r\n5\r\nHELLO\r\n6\r\n WORLD\r\n0\r\n\r\n", + ); + conn.read_length = 10; + let mut header_buf = [0; 50]; // buffer is long enough to hold the complete response + let response = Response::read(&mut conn, Method::GET, &mut header_buf).await.unwrap(); + + let body = response.body().read_to_end().await.unwrap(); + + assert_eq!(b"HELLO WORLD HELLO WORLD HELLO WORLD", body); + assert!(conn.is_exhausted()); + } + #[tokio::test] async fn can_read_to_end_of_connection_with_same_buffer() { let mut conn = FakeSingleReadConnection::new(b"HTTP/1.1 200 OK\r\n\r\nHELLO WORLD");