vba_decompress returns explicit data length

git-svn: trunk@314
remotes/push_mirror/metadata
Trog 22 years ago
parent 1fcdb89315
commit ea399527a9
  1. 4
      clamav-devel/ChangeLog
  2. 6
      clamav-devel/libclamav/scanners.c
  3. 16
      clamav-devel/libclamav/vba_extract.c
  4. 2
      clamav-devel/libclamav/vba_extract.h

@ -1,3 +1,7 @@
Fri Feb 20 14:55:32 GMT 2004 (trog)
-----------------------------------
* libclamav/vba_extract.c: vba_decompress returns explicit data length
Fri Feb 20 09:55:58 GMT 2004 (njh)
----------------------------------
* clamav-milter: The recent changes to the configure script changed

@ -592,7 +592,7 @@ int cli_scanole2(int desc, char **virname, long int *scanned, const struct cl_no
const char *tmpdir;
char *dir, *fullname;
unsigned char *data;
int ret = CL_CLEAN, fd, i;
int ret = CL_CLEAN, fd, i, data_len;
vba_project_t *vba_project;
cli_dbgmsg("in cli_scanole2()\n");
@ -634,13 +634,13 @@ int cli_scanole2(int desc, char **virname, long int *scanned, const struct cl_no
}
free(fullname);
cli_dbgmsg("decompress VBA project '%s'\n", vba_project->name[i]);
data = (unsigned char *) vba_decompress(fd, vba_project->offset[i]);
data = (unsigned char *) vba_decompress(fd, vba_project->offset[i], &data_len);
close(fd);
if(!data) {
cli_dbgmsg("WARNING: VBA project '%s' decompressed to NULL\n", vba_project->name[i]);
} else {
if(cl_scanbuff(data, strlen(data), virname, root) == CL_VIRUS) {
if(cl_scanbuff(data, data_len, virname, root) == CL_VIRUS) {
free(data);
ret = CL_VIRUS;
break;

@ -293,7 +293,7 @@ vba_project_t *vba56_dir_read(const char *dir)
return NULL;
}
if (vba_readn(fd, &LidA, 4) != 4) {
if (vba_readn(fd, &LidB, 4) != 4) {
close(fd);
return NULL;
}
@ -611,7 +611,7 @@ void byte_array_append(byte_array_t *array, unsigned char *src, unsigned int len
}
}
unsigned char *vba_decompress(int fd, uint32_t offset)
unsigned char *vba_decompress(int fd, uint32_t offset, int *size)
{
unsigned int i, pos=0, shift, win_pos, clean=TRUE, mask, distance;
uint8_t flag;
@ -631,6 +631,9 @@ unsigned char *vba_decompress(int fd, uint32_t offset)
if (result.data) {
free(result.data);
}
if (size) {
*size = 0;
}
return NULL;
}
token = vba_endian_convert_16(token);
@ -670,6 +673,9 @@ unsigned char *vba_decompress(int fd, uint32_t offset)
if (result.data) {
free(result.data);
}
if (size) {
*size = 0;
}
return NULL;
}
clean = FALSE;
@ -687,7 +693,9 @@ unsigned char *vba_decompress(int fd, uint32_t offset)
if (pos % VBA_COMPRESSION_WINDOW) {
byte_array_append(&result, buffer, pos % VBA_COMPRESSION_WINDOW);
}
byte_array_append(&result, "\0", 1);
if (size) {
*size = result.length;
}
return result.data;
}
@ -713,7 +721,7 @@ int vba_dump(vba_project_t *vba_project)
return FALSE;
}
data = vba_decompress(fd, vba_project->offset[i]);
data = vba_decompress(fd, vba_project->offset[i], NULL);
cli_dbgmsg("%s\n", data);
close(fd);

@ -33,6 +33,6 @@ typedef struct vba_project_tag {
} vba_project_t;
vba_project_t *vba56_dir_read(const char *dir);
unsigned char *vba_decompress(int fd, uint32_t offset);
unsigned char *vba_decompress(int fd, uint32_t offset, int *size);
#endif

Loading…
Cancel
Save