[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 00:59:29 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 5e1d2c2822f97c38f53d07272fd38f73b93d9746
Author: aCaB <acab at clamav.net>
Date:   Wed Aug 5 20:51:02 2009 +0200

    fix lzma return codes, update nsis/lzma

diff --git a/libclamav/lzma_iface.c b/libclamav/lzma_iface.c
index 994e7db..21f7180 100644
--- a/libclamav/lzma_iface.c
+++ b/libclamav/lzma_iface.c
@@ -81,12 +81,10 @@ int cli_LzmaInit(struct CLI_LZMA *L, uint64_t size_override) {
 
     LzmaDec_Construct(&L->state);
     if(LzmaDec_Allocate(&L->state, L->header, LZMA_PROPS_SIZE, &g_Alloc) != SZ_OK)
-	return CL_EMEM;
+	return LZMA_RESULT_DATA_ERROR;
     LzmaDec_Init(&L->state);
 
     L->freeme = 1;
-    if(~L->usize) L->finish = LZMA_FINISH_END;
-    else L->finish = LZMA_FINISH_ANY;
     return LZMA_RESULT_OK;
 }
 	
@@ -102,16 +100,29 @@ int cli_LzmaDecode(struct CLI_LZMA *L) {
     SRes res;
     SizeT outbytes, inbytes;
     ELzmaStatus status;
+    ELzmaFinishMode finish;
 
     if(!L->freeme) return cli_LzmaInit(L, 0);
 
-    outbytes = L->avail_out;
     inbytes = L->avail_in;
-    res = LzmaDec_DecodeToBuf(&L->state, L->next_out, &outbytes, L->next_in, &inbytes, L->finish, &status);
+    if(~L->usize && L->avail_out > L->usize) {
+	outbytes = L->usize;
+	finish = LZMA_FINISH_END;
+    } else {
+	outbytes = L->avail_out;
+	finish = LZMA_FINISH_ANY;
+    }
+    res = LzmaDec_DecodeToBuf(&L->state, L->next_out, &outbytes, L->next_in, &inbytes, finish, &status);
+    L->avail_in -= inbytes;
     L->next_in += inbytes;
+    L->avail_out -= outbytes;
     L->next_out += outbytes;
-    L->usize -= outbytes;
-    return 0; /* FIXMELZMA */
+    if(~L->usize) L->usize -= outbytes;
+    if(res != SZ_OK)
+	return LZMA_RESULT_DATA_ERROR;
+    if(!L->usize || status == LZMA_STATUS_FINISHED_WITH_MARK)
+	return LZMA_STREAM_END;
+    return LZMA_RESULT_OK;
 }
 
 /* int cli_LzmaInitUPX(CLI_LZMA **Lp, uint32_t dictsz) { */
diff --git a/libclamav/lzma_iface.h b/libclamav/lzma_iface.h
index 4ee5d08..b5d68e0 100644
--- a/libclamav/lzma_iface.h
+++ b/libclamav/lzma_iface.h
@@ -35,7 +35,6 @@ struct CLI_LZMA {
     unsigned int freeme;
     unsigned int init;
     uint64_t usize;
-    ELzmaFinishMode finish;
     unsigned char *next_in;
     unsigned char *next_out;
     SizeT avail_in;
diff --git a/libclamav/nsis/nulsft.c b/libclamav/nsis/nulsft.c
index bd50ac6..db1b7c5 100644
--- a/libclamav/nsis/nulsft.c
+++ b/libclamav/nsis/nulsft.c
@@ -97,8 +97,9 @@ static int nsis_init(struct nsis_st *n) {
     n->freecomp=1;
     break;
   case COMP_LZMA:
-    memset(&n->bz, 0, sizeof(struct CLI_LZMA));
-    cli_LzmaInit(&n->lz, 0xffffffffffffffffULL);
+    memset(&n->lz, 0, sizeof(struct CLI_LZMA));
+    if(cli_LzmaInit(&n->lz, 0xffffffffffffffffULL)!=LZMA_RESULT_OK)
+      return CL_EUNPACK;
     n->freecomp=1;
     break;
   case COMP_ZLIB:

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list