[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