Ticket #3348 (closed Bugs: fixed)
SEGV in ~bzip2_decompressor()
|Reported by:||basilevs@…||Owned by:||turkanis|
Destructor of unused bzip2_decompressor instance causes segmentation violation.
Function bzip2_base::end() is called from destructor without checking whether function bzip2_base::do_init() was called earlier. This causes a call to BZ2_bzDecompressEnd(s) without preceding call to BZ2_bzDecompressInit(s, 0, params_.small).
The problem appears with bzip2-1.0.5 compiled with mingw (gcc (GCC) 3.4.5 (mingw-vista special r3)).
A quick fix for this problem would be a test for !ready_ before calling of any BZ2_bz*compressEnd(s) functions.
I've added the line
if (!ready_) return;
in the very beginning of function void bzip2_base::end(bool compress) in bzip2.cpp and SEGVs dissapeared.
A patch is attached. Beware incorrect directory naming in the patch file.