Commit 9e6c4f8d authored by Max Kellermann's avatar Max Kellermann

archive/bzip2: throw on unexpected input EOF

Don't silently return 0 when there is no more data, because this may crash the caller. And flush output even if input EOF has been reached.
parent 41b47f95
......@@ -3,6 +3,8 @@ ver 0.21.26 (not yet released)
- osx: fix crash bug
- sles: support floating point samples
* archive
- bzip2: fix crash on corrupt bzip2 file
- bzip2: flush output at end of input file
- zzip: fix crash on corrupt ZIP file
* decoder
- sndfile: fix lost samples at end of file
......
......@@ -148,8 +148,7 @@ Bzip2InputStream::Read(void *ptr, size_t length)
bzstream.avail_out = length;
do {
if (!FillBuffer())
return 0;
const bool had_input = FillBuffer();
bz_result = BZ2_bzDecompress(&bzstream);
......@@ -160,6 +159,9 @@ Bzip2InputStream::Read(void *ptr, size_t length)
if (bz_result != BZ_OK)
throw std::runtime_error("BZ2_bzDecompress() has failed");
if (!had_input && bzstream.avail_out == length)
throw std::runtime_error("Unexpected end of bzip2 file");
} while (bzstream.avail_out == length);
nbytes = length - bzstream.avail_out;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment