fix broken compression when feeding data larger than 64 KiB

This commit is contained in:
Park Joon-Kyu 2025-05-10 17:23:13 +09:00
parent e1440079e7
commit b6893b13cd
2 changed files with 20 additions and 3 deletions

13
Cargo.lock generated
View File

@ -1320,6 +1320,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
dependencies = [
"crc32fast",
"libz-sys",
"miniz_oxide",
]
@ -1922,6 +1923,18 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "libz-sys"
version = "1.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d"
dependencies = [
"cc",
"libc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "linked-hash-map"
version = "0.5.6"

View File

@ -530,8 +530,8 @@ impl DeflateCompressionContext {
let mut buf = [0u8; BUF_SIZE];
loop {
let total_in = self.compress.total_in() - self.total_bytes_read;
let res = if total_in >= payload.len() as u64 {
let bytes_in = self.compress.total_in() - self.total_bytes_read;
let res = if bytes_in >= payload.len() as u64 {
self.compress
.compress(&[], &mut buf, flate2::FlushCompress::Sync)
.map_err(|err| {
@ -540,7 +540,11 @@ impl DeflateCompressionContext {
})?
} else {
self.compress
.compress(&payload, &mut buf, flate2::FlushCompress::None)
.compress(
&payload[bytes_in as usize..],
&mut buf,
flate2::FlushCompress::None,
)
.map_err(|err| {
self.reset();
ProtocolError::Io(err.into())