diff --git a/crates/async-compression/Cargo.toml b/crates/async-compression/Cargo.toml index c2d3e5db..aa0313e7 100644 --- a/crates/async-compression/Cargo.toml +++ b/crates/async-compression/Cargo.toml @@ -139,10 +139,6 @@ required-features = ["zlib", "tokio"] name = "zstd_gzip" required-features = ["zstd", "gzip", "tokio"] -[[test]] -name = "empty_stream" -required-features = ["zstd", "tokio"] - [[example]] name = "lzma_filters" required-features = ["xz", "tokio"] diff --git a/crates/async-compression/src/generic/bufread/decoder.rs b/crates/async-compression/src/generic/bufread/decoder.rs index 0033f021..9cad7380 100644 --- a/crates/async-compression/src/generic/bufread/decoder.rs +++ b/crates/async-compression/src/generic/bufread/decoder.rs @@ -17,7 +17,6 @@ enum State { pub struct Decoder { state: State, multiple_members: bool, - received_data: bool, } impl Default for Decoder { @@ -25,7 +24,6 @@ impl Default for Decoder { Self { state: State::Decoding, multiple_members: false, - received_data: false, } } } @@ -50,16 +48,8 @@ impl Decoder { // reader has returned EOF. self.multiple_members = false; - // Empty stream (no data received) - return empty output - if !self.received_data { - State::Done - } else { - State::Flushing - } + State::Flushing } else { - if !input.unwritten().is_empty() { - self.received_data = true; - } match decoder.decode(input, output) { Ok(true) => State::Flushing, // ignore the first error, occurs when input is empty diff --git a/crates/async-compression/tests/empty_stream.rs b/crates/async-compression/tests/empty_stream.rs deleted file mode 100644 index 44dc7eba..00000000 --- a/crates/async-compression/tests/empty_stream.rs +++ /dev/null @@ -1,19 +0,0 @@ -//! Test that bufread decoders handle empty input streams (immediate EOF). - -#[macro_use] -mod utils; - -#[tokio::test] -async fn zstd_empty_stream() { - use async_compression::tokio::bufread::ZstdDecoder; - use std::io::Cursor; - use tokio::io::AsyncReadExt; - - let empty: &[u8] = &[]; - let mut decoder = ZstdDecoder::new(Cursor::new(empty)); - let mut output = Vec::new(); - let result = decoder.read_to_end(&mut output).await; - // Empty input should return Ok(0), not error with "zstd stream did not finish" - assert!(result.is_ok(), "empty stream failed: {:?}", result); - assert!(output.is_empty()); -}