[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b
aCaB
acab at clamav.net
Sun Apr 4 01:27:51 UTC 2010
The following commit has been merged in the debian/unstable branch:
commit a8e6b43214abf45bd8a72dcda406af89472d3d6f
Author: aCaB <acab at clamav.net>
Date: Wed Mar 31 18:08:01 2010 +0200
add recovery mode to 7z ansi
diff --git a/ChangeLog b/ChangeLog
index 05362d9..47f48e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Mar 31 18:07:05 CEST 2010 (acab)
+------------------------------------
+ * libclamav/7z: add recovery mode to 7z ansi
+
Wed Mar 31 16:27:18 EEST 2010 (edwin)
-------------------------------------
* shared/output.c: fix race condition in IDSESSION mode (bb #1838).
diff --git a/libclamav/7z/Archive/7z/7zIn.c b/libclamav/7z/Archive/7z/7zIn.c
index f6143f8..e9aa08a 100644
--- a/libclamav/7z/Archive/7z/7zIn.c
+++ b/libclamav/7z/Archive/7z/7zIn.c
@@ -1125,8 +1125,33 @@ static SRes SzArEx_Open2(
p->startPosAfterHeader = k7zStartHeaderSize;
+/* aCaB - 2010-02-16 - RECOVERY MODE
if (CrcCalc(header + 12, 20) != GetUi32(header + 8))
- return SZ_ERROR_CRC;
+ return SZ_ERROR_CRC; */
+ if(!GetUi32(header + 8) && !nextHeaderOffset && !nextHeaderSize && !nextHeaderCRC) {
+ int i, checkSize = 500;
+ Byte buf[500];
+ Int64 curpos=0, endpos=0, readpos;
+ RINOK(inStream->Seek(inStream, &curpos, SZ_SEEK_CUR));
+ RINOK(inStream->Seek(inStream, &endpos, SZ_SEEK_END));
+ if(endpos-curpos < 500) checkSize = endpos-curpos;
+ readpos = endpos - checkSize;
+ RINOK(inStream->Seek(inStream, &readpos, SZ_SEEK_SET));
+ RINOK(LookInStream_Read2(inStream, buf, checkSize, SZ_ERROR_ARCHIVE));
+ for (i = (int)checkSize - 2; i >= 0; i--)
+ if((buf[i] == 0x17 && buf[i + 1] == 0x6) || (buf[i] == 0x01 && buf[i + 1] == 0x04))
+ break;
+ if (i < 0)
+ return SZ_ERROR_ARCHIVE;
+ nextHeaderSize = checkSize - i;
+ nextHeaderOffset = readpos + i;
+ if(nextHeaderOffset < k7zStartHeaderSize)
+ return SZ_ERROR_INPUT_EOF;
+ nextHeaderOffset -= k7zStartHeaderSize;
+ nextHeaderCRC = CrcCalc(buf + i, (size_t)nextHeaderSize);
+ RINOK(inStream->Seek(inStream, &curpos, SZ_SEEK_SET));
+ }
+/* aCaB - 2010-02-16 - END OF RECOVERY MODE */
nextHeaderSizeT = (size_t)nextHeaderSize;
if (nextHeaderSizeT != nextHeaderSize)
--
Debian repository for ClamAV
More information about the Pkg-clamav-commits
mailing list