[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