Panic in `ChainedHashTable::add_hash_value` when encoding
koute opened this issue · 2 comments
koute commented
This code panics when compiled in debug mode:
extern crate deflate;
use std::io::Write;
use deflate::CompressionOptions;
use deflate::write::GzEncoder;
fn main() {
let fp = Vec::new();
let mut fp = GzEncoder::new( fp, CompressionOptions::default() );
fp.write( &[0] ).unwrap();
fp.flush().unwrap();
fp.write( &[0] ).unwrap();
fp.write( &[0, 0] ).unwrap();
}
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `1`,
right: `0`', /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/chained_hash_table.rs:141:9
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::print
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: std::panicking::default_hook::{{closure}}
at libstd/panicking.rs:211
3: std::panicking::default_hook
at libstd/panicking.rs:227
4: std::panicking::rust_panic_with_hook
at libstd/panicking.rs:475
5: std::panicking::continue_panic_fmt
at libstd/panicking.rs:390
6: std::panicking::begin_panic_fmt
at libstd/panicking.rs:345
7: deflate::chained_hash_table::ChainedHashTable::add_hash_value
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/chained_hash_table.rs:141
8: deflate::lz77::process_chunk_lazy
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/lz77.rs:346
9: deflate::lz77::process_chunk
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/lz77.rs:217
10: deflate::lz77::lz77_compress_block
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/lz77.rs:655
11: deflate::compress::compress_data_dynamic_n
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/compress.rs:130
12: deflate::writer::compress_until_done
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/writer.rs:25
13: <deflate::writer::DeflateEncoder<W> as std::io::Write>::flush
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/writer.rs:137
14: <deflate::writer::gzip::GzEncoder<W> as std::io::Write>::flush
at /home/kou/.cargo/registry/src/github.com-1ecc6299db9ec823/deflate-0.7.18/src/writer.rs:454
15: repro::main
at src/main.rs:15
16: std::rt::lang_start::{{closure}}
at /checkout/src/libstd/rt.rs:74
17: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:310
18: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:106
19: std::rt::lang_start_internal
at libstd/panicking.rs:289
at libstd/panic.rs:392
at libstd/rt.rs:58
20: std::rt::lang_start
at /checkout/src/libstd/rt.rs:74
21: main
22: __libc_start_main
23: _start
rustc 1.29.0-nightly (6a1c0637c 2018-07-23)
x86_64-unknown-linux-gnu
deflate 0.7.18
oyvindln commented
The panic is on a debug counter that's there to check that bytes aren't skipped, it's possible that the error is simply that it's not reset properly when flushing. I will investigate.
oyvindln commented
Sorry for taking some time, just going to disable the debug check for now, it was mostly stuff used when developing anyhow.