Opened 13 years ago
Closed 12 years ago
#3348 closed Bugs (fixed)
SEGV in ~bzip2_decompressor()
Reported by: | Owned by: | Jonathan Turkanis | |
---|---|---|---|
Milestone: | Boost 1.40.0 | Component: | iostreams |
Version: | Boost 1.39.0 | Severity: | Problem |
Keywords: | Cc: |
Description
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.
Attachments (2)
Change History (5)
by , 13 years ago
Attachment: | bzip2.patch added |
---|
by , 13 years ago
Attachment: | bzip2_test.cpp added |
---|
This sample program demonstrates the SEGV at the end of main() fucntion.
comment:1 by , 13 years ago
The same error happens on Linux with g++ (Debian 4.3.4-1), bzlib 1.0.5, boost-1.38.
comment:3 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Adds a check for ready_ before calling of BZ2_bz*ompressEnd() functions.