Skip to content

Commit 894b367

Browse files
committed
truncate decompressed buffer in block::decompress
1 parent 85a909f commit 894b367

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/block/mod.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ pub fn decompress(src: &[u8], uncompressed_size: Option<i32>) -> Result<Vec<u8>>
218218

219219
let mut buffer = vec![0u8; size];
220220

221-
decompress_to_buffer(src, uncompressed_size, &mut buffer)?;
221+
let sz = decompress_to_buffer(src, uncompressed_size, &mut buffer)?;
222+
buffer.truncate(sz);
222223
Ok(buffer)
223224
}
224225

@@ -294,6 +295,18 @@ mod test {
294295

295296
use super::compress_to_buffer;
296297

298+
/// This test will fail unless the buffer created by decompress is correctly truncated
299+
#[test]
300+
fn decompress_truncate_test() {
301+
let src = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".as_bytes();
302+
let rs_compressed = compress(src, None, false).unwrap();
303+
let rs_compressed_rs_uncompressed =
304+
decompress(&rs_compressed, Some((src.len() as i32) * 256)).unwrap();
305+
306+
// compare the uncompressed result from rust
307+
assert_eq!(rs_compressed_rs_uncompressed, src,);
308+
}
309+
297310
#[test]
298311
fn test_compression_without_prefix() {
299312
let size = 65536;

0 commit comments

Comments
 (0)