panics when compressing empty data
tsheinen opened this issue · comments
Hi! Attempting to compress empty data (my example uses compress_seekable but I have tested a file also) causes a panic.
fn main() {
let cursor = std::io::Cursor::new(&[]);
let mut out = Vec::new();
zopfli::compress_seekable(
&zopfli::Options::default(),
&zopfli::Format::Gzip,
cursor,
&mut out,
);
}
thread 'main' panicked at 'attempt to subtract with overflow', /home/sky/git/zopfli/src/deflate.rs:311:19
stack backtrace:
0: rust_begin_unwind
at /rustc/45e2c2881d11324d610815bfff097e25c412199e/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /rustc/45e2c2881d11324d610815bfff097e25c412199e/library/core/src/panicking.rs:142:14
2: core::panicking::panic
at /rustc/45e2c2881d11324d610815bfff097e25c412199e/library/core/src/panicking.rs:48:5
3: zopfli::deflate::calculate_block_symbol_size_small
at /home/sky/git/zopfli/src/deflate.rs:311:19
4: zopfli::deflate::calculate_block_symbol_size_given_counts
at /home/sky/git/zopfli/src/deflate.rs:345:9
5: zopfli::deflate::try_optimize_huffman_for_rle
at /home/sky/git/zopfli/src/deflate.rs:856:20
6: zopfli::deflate::get_dynamic_lengths
at /home/sky/git/zopfli/src/deflate.rs:905:5
7: zopfli::deflate::calculate_block_size
at /home/sky/git/zopfli/src/deflate.rs:836:31
8: zopfli::squeeze::lz77_optimal
at /home/sky/git/zopfli/src/squeeze.rs:506:20
9: zopfli::deflate::blocksplit_attempt
at /home/sky/git/zopfli/src/deflate.rs:1147:17
10: zopfli::deflate::deflate_part
at /home/sky/git/zopfli/src/deflate.rs:164:31
11: zopfli::deflate::deflate
at /home/sky/git/zopfli/src/deflate.rs:104:9
12: zopfli::gzip::gzip_compress
at /home/sky/git/zopfli/src/gzip.rs:49:5
13: zopfli::compress
at /home/sky/git/zopfli/src/lib.rs:98:25
14: zopfli::compress_seekable
at /home/sky/git/zopfli/src/lib.rs:83:5
15: scratch::main
at ./src/main.rs:4:5
16: core::ops::function::FnOnce::call_once
at /rustc/45e2c2881d11324d610815bfff097e25c412199e/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.