[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. 99ae9353f6834da0cb73f59f4b32d1f0ae1263fa

Stephen Gran steve at lobefin.net
Thu Sep 4 12:37:05 UTC 2008


The following commit has been merged in the debian/unstable branch:
commit 0f9fad9af2322b39c4be073d7c845cdb143af83f
Author: Stephen Gran <steve at lobefin.net>
Date:   Thu Sep 4 13:25:50 2008 +0100

    Revert "a cleaner approach to bb#844 and bb#888"
    
    This reverts commit 48c70e95ec7c420c5cd882962faeec3dad89d835.

diff --git a/ChangeLog b/ChangeLog
index 2d63892..6f17f00 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,3 @@
-Mon Mar 24 19:31:10 CET 2008 (acab)
------------------------------------
-  * libclamav/nsis: a cleaner approach to bb#844 and bb#888
-
  Mon Mar 24 20:30:34 EET 2008 (edwin)
  ------------------------------------
    * libclamav/mbox.c, message.c: cli_warnmsg -> cli_dbgmsg (bb #880),
diff --git a/libclamav/nsis/nulsft.c b/libclamav/nsis/nulsft.c
index a0e1bd8..299c893 100644
--- a/libclamav/nsis/nulsft.c
+++ b/libclamav/nsis/nulsft.c
@@ -135,7 +135,8 @@ static void nsis_shutdown(struct nsis_st *n) {
 }
 
 static int nsis_decomp(struct nsis_st *n) {
-  int ret = CL_EFORMAT;
+  /*  int ret = CL_EFORMAT; */
+  int ret = CL_SUCCESS; /* unpack broken files too - bb#873 */
   switch(n->comp) {
   case COMP_BZIP2:
     n->bz.avail_in = n->nsis.avail_in;
@@ -188,7 +189,7 @@ static int nsis_decomp(struct nsis_st *n) {
 static int nsis_unpack_next(struct nsis_st *n, cli_ctx *ctx) {
   unsigned char *ibuf;
   uint32_t size, loops;
-  int ret, gotsome=0;
+  int ret;
   unsigned char obuf[BUFSIZ];
 
   if (n->eof) {
@@ -274,12 +275,10 @@ static int nsis_unpack_next(struct nsis_st *n, cli_ctx *ctx) {
 
       while ((ret=nsis_decomp(n))==CL_SUCCESS) {
 	if ((size = n->nsis.next_out - obuf)) {
-	  gotsome=1;
 	  if (cli_writen(n->ofd, obuf, size) != (ssize_t) size) {
 	    cli_dbgmsg("NSIS: cannot write output file"__AT__"\n");
 	    free(ibuf);
 	    close(n->ofd);
-	    nsis_shutdown(n);
 	    return CL_EIO;
 	  }
 	  n->nsis.next_out = obuf;
@@ -291,37 +290,27 @@ static int nsis_unpack_next(struct nsis_st *n, cli_ctx *ctx) {
 	    nsis_shutdown(n);
 	    return ret;
 	  }
-	} else if (++loops > 20) {
+	} else if (++loops > 10) {
 	  cli_dbgmsg("NSIS: xs looping, breaking out"__AT__"\n");
-	  ret = CL_EFORMAT;
+	  ret = CL_BREAK;
 	  break;
 	}
       }
 
-      nsis_shutdown(n);
-
-      if (n->nsis.next_out - obuf) {
-	gotsome=1;
-	if (cli_writen(n->ofd, obuf, n->nsis.next_out - obuf) != n->nsis.next_out - obuf) {
-	  cli_dbgmsg("NSIS: cannot write output file"__AT__"\n");
-	  free(ibuf);
-	  close(n->ofd);
-	  return CL_EIO;
-	}
-      }
-
-      if (ret != CL_SUCCESS && ret != CL_BREAK) {
+      if (ret != CL_BREAK) {
 	cli_dbgmsg("NSIS: bad stream"__AT__"\n");
-	if (gotsome) {
-	  ret = CL_SUCCESS;
-	} else {
-	  ret CL_EMAXSIZE;
-	  close(n->ofd);
-	}
 	free(ibuf);
-	return ret;
+	close(n->ofd);
+	return CL_EFORMAT;
       }
 
+      if (cli_writen(n->ofd, obuf, n->nsis.next_out - obuf) != n->nsis.next_out - obuf) {
+	cli_dbgmsg("NSIS: cannot write output file"__AT__"\n");
+	free(ibuf);
+	close(n->ofd);
+	return CL_EIO;
+      }
+      nsis_shutdown(n);
     }
 
     free(ibuf);
@@ -399,48 +388,32 @@ static int nsis_unpack_next(struct nsis_st *n, cli_ctx *ctx) {
     while (size && (ret=nsis_decomp(n))==CL_SUCCESS) {
       unsigned int wsz;
       if ((wsz = n->nsis.next_out - obuf)) {
-	gotsome=1;
 	if (cli_writen(n->ofd, obuf, wsz) != (ssize_t) wsz) {
-	  cli_dbgmsg("NSIS: cannot write output file"__AT__"\n");
 	  close(n->ofd);
 	  return CL_EIO;
 	}
 	size-=wsz;
-	loops=0;
 	n->nsis.next_out = obuf;
 	n->nsis.avail_out = MIN(size,BUFSIZ);
       } else if ( ++loops > 20 ) {
 	cli_dbgmsg("NSIS: xs looping, breaking out"__AT__"\n");
-	ret = CL_EFORMAT;
+	ret = CL_BREAK;
 	break;
       }
     }
 
-    if (n->nsis.next_out - obuf) {
-      gotsome=1;
+    if (ret == CL_BREAK) {
       if (cli_writen(n->ofd, obuf, n->nsis.next_out - obuf) != n->nsis.next_out - obuf) {
-	cli_dbgmsg("NSIS: cannot write output file"__AT__"\n");
-	free(ibuf);
 	close(n->ofd);
 	return CL_EIO;
       }
-    }
-
-    if (ret == CL_EFORMAT) {
-      cli_dbgmsg("NSIS: bad stream"__AT__"\n");
-      if (!gotsome) {
-	close(n->ofd);
-	return CL_EMAXSIZE;
-      } 
-    }
-
-    if (ret == CL_EFORMAT || ret == CL_BREAK) {
       n->eof=1;
     } else if (ret != CL_SUCCESS) {
       cli_dbgmsg("NSIS: bad stream"__AT__"\n");
       close(n->ofd);
       return CL_EFORMAT;
     }
+    
     return CL_SUCCESS;
   }
 
@@ -572,6 +545,7 @@ int cli_scannulsft(int desc, cli_ctx *ctx, off_t offset) {
 	  if(!cli_leavetemps_flag)
 	    unlink(nsist.ofn);
 	} else if(ret == CL_EMAXSIZE) {
+	    cli_errmsg("returned %d\n", ret);
 	    ret = nsist.solid ? CL_BREAK : CL_SUCCESS;
 	}
     } while(ret == CL_SUCCESS);

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list