diff --git a/src/p_unix.cpp b/src/p_unix.cpp index 6c831467..7cac7dd1 100644 --- a/src/p_unix.cpp +++ b/src/p_unix.cpp @@ -565,6 +565,8 @@ void PackUnix::unpack(OutputFile *fo) fi->seek(4, SEEK_CUR); } + if ((int)(blocksize + OVERHEAD) < 0) + throwCantUnpack("blocksize corrupted"); ibuf.alloc(blocksize + OVERHEAD); // decompress blocks @@ -595,6 +597,8 @@ void PackUnix::unpack(OutputFile *fo) throwCompressedDataViolation(); i = blocksize + OVERHEAD - sz_cpr; + if (i < 0) + throwCantUnpack("corrupt b_info"); fi->readx(buf+i, sz_cpr); // update checksum of compressed data c_adler = upx_adler32(buf + i, sz_cpr, c_adler);