[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:28 UTC 2010
The following commit has been merged in the debian/unstable branch:
commit 87787e76a800f4e089a2f0f967cb673045554eed
Author: aCaB <acab at clamav.net>
Date: Wed Aug 5 16:51:09 2009 +0200
compiles, upx-lzma b0rked
diff --git a/libclamav/lzma_iface.c b/libclamav/lzma_iface.c
index 2e99cc2..994e7db 100644
--- a/libclamav/lzma_iface.c
+++ b/libclamav/lzma_iface.c
@@ -25,55 +25,42 @@
#endif
#include "lzma_iface.h"
-#include "7z/LzmaDec.h"
-#include "cltypes.h"
-#include "others.h"
static void *__wrap_alloc(void *unused, size_t size) {
unused = unused;
return cli_malloc(size);
}
-static void *__wrap_free(void *unused, void *freeme) {
+static void __wrap_free(void *unused, void *freeme) {
unused = unused;
free(freeme);
}
static ISzAlloc g_Alloc = { __wrap_alloc, __wrap_free };
-struct CLI_LZMA {
- CLzmaDec state;
- unsigned char header[LZMA_PROPS_SIZE];
- unsigned int p_cnt;
- unsigned int s_cnt;
- unsigned int freeme;
- uint64_t usize;
- ELzmaFinishMode finish;
-};
-
-static unsigned char lzma_getbyte(CLI_LZMA *L, int *fail) {
- unsigned char *c = (unsigned char *)L->next_in;
- if(!c || !L->avail_in) {
+
+static unsigned char lzma_getbyte(struct CLI_LZMA *L, int *fail) {
+ unsigned char c;
+ if(!L->next_in || !L->avail_in) {
*fail = 1;
return 0;
}
*fail = 0;
- L->next_in = &c[1];
+ c = L->next_in[0];
+ L->next_in++;
L->avail_in--;
- return *c;
+ return c;
}
-int cli_LzmaInit(CLI_LZMA **Lp, uint64_t size_override) {
- CLI_LZMA *L = *Lp;
+int cli_LzmaInit(struct CLI_LZMA *L, uint64_t size_override) {
int fail;
- if(!L) {
- *Lp = L = cli_calloc(sizeof(*L), 1);
- if(!L) return CL_EMEM;
+ if(!L->init) {
L->p_cnt = LZMA_PROPS_SIZE;
if(size_override)
L->usize = size_override;
else
L->s_cnt = 8;
+ L->init = 1;
} else if(size_override)
cli_warnmsg("cli_LzmaInit: ignoring late size override\n");
@@ -95,42 +82,36 @@ int cli_LzmaInit(CLI_LZMA **Lp, 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;
- LzmaDec_Init(&state);
+ LzmaDec_Init(&L->state);
L->freeme = 1;
- if(~L-usize) L->finish = LZMA_FINISH_END;
+ if(~L->usize) L->finish = LZMA_FINISH_END;
else L->finish = LZMA_FINISH_ANY;
return LZMA_RESULT_OK;
}
-void cli_LzmaShutdown(CLI_LZMA **Lp) {
- CLI_LZMA *L;
-
- if(!Lp) return;
- L = *Lp;
+void cli_LzmaShutdown(struct CLI_LZMA *L) {
if(L->freeme)
LzmaDec_Free(&L->state, &g_Alloc);
- free(L);
- *Lp = NULL;
return;
}
-int cli_LzmaDecode(CLI_LZMA **Lp) {
- CLI_LZMA *L = *Lp;
-
- if(!L->freeme) return cli_LzmaInit(LP, 0);
-
+int cli_LzmaDecode(struct CLI_LZMA *L) {
SRes res;
- SizeT outbytes = L->avail_out;
- SizeT inbytes = L->avail_in;
+ SizeT outbytes, inbytes;
ELzmaStatus status;
+
+ 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);
L->next_in += inbytes;
L->next_out += outbytes;
L->usize -= outbytes;
-
+ return 0; /* FIXMELZMA */
}
/* int cli_LzmaInitUPX(CLI_LZMA **Lp, uint32_t dictsz) { */
diff --git a/libclamav/lzma_iface.h b/libclamav/lzma_iface.h
index 6833f1a..4ee5d08 100644
--- a/libclamav/lzma_iface.h
+++ b/libclamav/lzma_iface.h
@@ -23,21 +23,37 @@
#ifndef __LZMA_IFACE_H
#define __LZMA_IFACE_H
+#include "7z/LzmaDec.h"
#include "cltypes.h"
+#include "others.h"
+
+struct CLI_LZMA {
+ CLzmaDec state;
+ unsigned char header[LZMA_PROPS_SIZE];
+ unsigned int p_cnt;
+ unsigned int s_cnt;
+ unsigned int freeme;
+ unsigned int init;
+ uint64_t usize;
+ ELzmaFinishMode finish;
+ unsigned char *next_in;
+ unsigned char *next_out;
+ SizeT avail_in;
+ SizeT avail_out;
+};
-typedef struct CLI_LZMA_tag CLI_LZMA;
struct stream_state {
- uint32_t avail_in;
- unsigned char *next_in;
- uint32_t avail_out;
- unsigned char *next_out;
+ uint32_t avail_in;
+ unsigned char *next_in;
+ uint32_t avail_out;
+ unsigned char *next_out;
};
-int cli_LzmaInit(CLI_LZMA **, uint64_t);
-void cli_LzmaShutdown(CLI_LZMA **);
-int cli_LzmaDecode(CLI_LZMA **, struct stream_state*);
-int cli_LzmaInitUPX(CLI_LZMA **, uint32_t);
+int cli_LzmaInit(struct CLI_LZMA *, uint64_t);
+void cli_LzmaShutdown(struct CLI_LZMA *);
+int cli_LzmaDecode(struct CLI_LZMA *);
+/* int cli_LzmaInitUPX(struct CLI_LZMA **, uint32_t); FIXMELZMA */
#define LZMA_STREAM_END 2
#define LZMA_RESULT_OK 0
diff --git a/libclamav/nsis/nulsft.c b/libclamav/nsis/nulsft.c
index 97628eb..bd50ac6 100644
--- a/libclamav/nsis/nulsft.c
+++ b/libclamav/nsis/nulsft.c
@@ -76,7 +76,7 @@ struct nsis_st {
uint8_t eof;
struct stream_state nsis;
nsis_bzstream bz;
- CLI_LZMA* lz;
+ struct CLI_LZMA lz;
/* z_stream z; */
nsis_z_stream z;
unsigned char *freeme;
@@ -97,6 +97,7 @@ 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);
n->freecomp=1;
break;
@@ -150,13 +151,21 @@ static int nsis_decomp(struct nsis_st *n) {
n->nsis.next_out = n->bz.next_out;
break;
case COMP_LZMA:
- switch (cli_LzmaDecode(&n->lz, &n->nsis)) {
+ n->lz.avail_in = n->nsis.avail_in;
+ n->lz.next_in = n->nsis.next_in;
+ n->lz.avail_out = n->nsis.avail_out;
+ n->lz.next_out = n->nsis.next_out;
+ switch (cli_LzmaDecode(&n->lz)) {
case LZMA_RESULT_OK:
ret = CL_SUCCESS;
break;
case LZMA_STREAM_END:
ret = CL_BREAK;
}
+ n->nsis.avail_in = n->lz.avail_in;
+ n->nsis.next_in = n->lz.next_in;
+ n->nsis.avail_out = n->lz.avail_out;
+ n->nsis.next_out = n->lz.next_out;
break;
case COMP_ZLIB:
n->z.avail_in = n->nsis.avail_in;
diff --git a/libclamav/upx.c b/libclamav/upx.c
index 424135a..d7dc814 100644
--- a/libclamav/upx.c
+++ b/libclamav/upx.c
@@ -523,22 +523,23 @@ int upx_inflate2e(char *src, uint32_t ssize, char *dst, uint32_t *dsize, uint32_
}
int upx_inflatelzma(char *src, uint32_t ssize, char *dst, uint32_t *dsize, uint32_t upx0, uint32_t upx1, uint32_t ep) {
- CLI_LZMA *lz = NULL;
+ struct CLI_LZMA l;
struct stream_state s;
uint32_t magic[]={0xb16,0xb1e,0};
- cli_LzmaInitUPX(&lz, *dsize);
+ memset(&l, 0, sizeof(l));
+ //cli_LzmaInitUPX(&lz, *dsize); /* FIXMELZMA: make func and check return value */
s.avail_in = ssize;
s.avail_out = *dsize;
s.next_in = (unsigned char*)src+2;
s.next_out = (unsigned char*)dst;
- if(cli_LzmaDecode(&lz, &s)==LZMA_RESULT_DATA_ERROR) {
+ if(cli_LzmaDecode(&l)==LZMA_RESULT_DATA_ERROR) {
/* __asm__ __volatile__("int3"); */
- cli_LzmaShutdown(&lz);
+ cli_LzmaShutdown(&l);
return -1;
}
- cli_LzmaShutdown(&lz);
+ cli_LzmaShutdown(&l);
return pefromupx (src, ssize, dst, dsize, ep, upx0, upx1, magic, *dsize);
}
--
Debian repository for ClamAV
More information about the Pkg-clamav-commits
mailing list