Commit 1f6a7d64 authored by Max Kellermann's avatar Max Kellermann

archive/zzip: fix crash on corrupt ZIP file

Sometimes, zzip_file_read() returns 0 even though the end of the file was not reached. This causes assertion failures in DecoderBridge::Read(). Closes https://github.com/MusicPlayerDaemon/MPD/issues/935
parent e44b953d
......@@ -2,6 +2,8 @@ ver 0.21.26 (not yet released)
* output
- osx: fix crash bug
- sles: support floating point samples
* archive
- zzip: fix crash on corrupt ZIP file
* decoder
- sndfile: fix lost samples at end of file
......
......@@ -32,6 +32,8 @@
#include <zzip/zzip.h>
#include <inttypes.h> /* for PRIoffset (PRIu64) */
struct ZzipDir {
ZZIP_DIR *const dir;
......@@ -151,6 +153,11 @@ ZzipInputStream::Read(void *ptr, size_t read_size)
if (nbytes < 0)
throw std::runtime_error("zzip_file_read() has failed");
if (nbytes == 0 && !IsEOF())
throw FormatRuntimeError("Unexpected end of file %s"
" at %" PRIoffset " of %" PRIoffset,
GetURI(), GetOffset(), GetSize());
offset = zzip_tell(file);
return nbytes;
}
......
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