Allow unfilter when verifyOverlappingDecompression, for convenience

in end-to-end checksum.
	packer.h packer.cpp p_unix.cpp

committer: jreiser <jreiser> 1141252960 +0000
This commit is contained in:
John Reiser
2006-03-01 22:42:40 +00:00
parent d461ebbda1
commit af7de75ad4
3 changed files with 11 additions and 8 deletions
+6 -3
View File
@@ -295,7 +295,7 @@ bool Packer::checkFinalCompressionRatio(const OutputFile *fo) const
**************************************************************************/
void Packer::decompress(const upx_bytep in, upx_bytep out,
bool verify_checksum)
bool verify_checksum, Filter *fp)
{
unsigned adler;
@@ -316,6 +316,9 @@ void Packer::decompress(const upx_bytep in, upx_bytep out,
// verify checksum of decompressed data
if (verify_checksum)
{
if (fp) {
fp->unfilter(out, ph.u_len);
}
adler = upx_adler32(out, ph.u_len, ph.saved_u_adler);
if (adler != ph.u_adler)
throwChecksumError();
@@ -355,7 +358,7 @@ bool Packer::testOverlappingDecompression(const upx_bytep buf,
}
void Packer::verifyOverlappingDecompression()
void Packer::verifyOverlappingDecompression(Filter *fp)
{
assert(ph.c_len < ph.u_len);
assert((int)ph.overlap_overhead > 0);
@@ -381,7 +384,7 @@ void Packer::verifyOverlappingDecompression()
if (offset + ph.c_len > obuf.getSize())
return;
memmove(obuf + offset, obuf, ph.c_len);
decompress(obuf + offset, obuf, true);
decompress(obuf + offset, obuf, true, fp);
obuf.checkState();
#endif /* !UNUPX */
}