Also verifyOverlappingDecompression() for watcom/le.

This commit is contained in:
Markus F.X.J. Oberhumer
2006-12-06 12:20:22 +01:00
parent f2b9dff596
commit 217420cfa5
4 changed files with 21 additions and 8 deletions
+15 -2
View File
@@ -366,9 +366,8 @@ void ph_decompress(PackHeader &ph, const upx_bytep in, upx_bytep out,
// verify checksum of decompressed data
if (verify_checksum)
{
if (ft) {
if (ft)
ft->unfilter(out, ph.u_len);
}
adler = upx_adler32(out, ph.u_len, ph.saved_u_adler);
if (adler != ph.u_adler)
throwChecksumError();
@@ -450,6 +449,20 @@ void Packer::verifyOverlappingDecompression(Filter *ft)
}
void Packer::verifyOverlappingDecompression(upx_bytep o_ptr, unsigned o_size, Filter *ft)
{
assert(ph.c_len < ph.u_len);
assert((int)ph.overlap_overhead > 0);
if (ph_skipVerify(ph))
return;
unsigned offset = (ph.u_len + ph.overlap_overhead) - ph.c_len;
if (offset + ph.c_len > o_size)
return;
memmove(o_ptr + offset, o_ptr, ph.c_len);
decompress(o_ptr + offset, o_ptr, true, ft);
}
/*************************************************************************
// Find overhead for in-place decompression in an heuristic way
// (using a binary search). Return 0 on error.