Scan_all: virus alert handling improvements

remotes/push_mirror/0.98.1
David Raynor 12 years ago
parent 51d0a74843
commit fab9317ed2
  1. 9
      clamd/scanner.c
  2. 8
      libclamav/others.c

@ -106,7 +106,7 @@ void hash_callback(int fd, unsigned long long size, const unsigned char *md5, co
int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_reason reason, struct cli_ftw_cbdata *data)
{
struct scan_cb_data *scandata = data->data;
const char *virname;
const char *virname = NULL;
const char **virpp = &virname;
int ret;
int type = scandata->type;
@ -233,7 +233,7 @@ int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_rea
if (scandata->options & CL_SCAN_ALLMATCHES) {
virpp = (const char **)*virpp; /* temp hack for scanall mode until api augmentation */
virname = virpp[0];
if (virpp) virname = virpp[0];
}
if (thrmgr_group_need_terminate(scandata->conn->group)) {
@ -244,6 +244,11 @@ int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_rea
return ret == CL_ETIMEOUT ? ret : CL_BREAK;
}
if ((ret == CL_VIRUS) && (virname == NULL)) {
logg("*%s: reported infected but no virname returned!\n", filename);
ret = CL_EMEM;
}
if (ret == CL_VIRUS) {
scandata->infected++;
if (conn_reply_virus(scandata->conn, filename, virname) == -1) {

@ -841,17 +841,19 @@ void cli_append_virus(cli_ctx * ctx, const char * virname)
return;
if (SCAN_ALL) {
if (ctx->size_viruses == 0) {
ctx->size_viruses = 2;
if (!(ctx->virname = malloc(ctx->size_viruses * sizeof(char *)))) {
cli_errmsg("cli_append_virus: fails on malloc() - virus %s virname not appended.\n", virname);
return;
}
ctx->size_viruses = 2;
} else if (ctx->num_viruses+1 == ctx->size_viruses) {
ctx->size_viruses *= 2;
if ((ctx->virname = realloc((void *)ctx->virname, ctx->size_viruses * sizeof (char *))) == NULL) {
void * newptr = NULL;
if ((newptr = realloc((void *)ctx->virname, 2 * ctx->size_viruses * sizeof (char *))) == NULL) {
cli_errmsg("cli_append_virus: fails on realloc() - virus %s virname not appended.\n", virname);
return;
}
ctx->virname = newptr;
ctx->size_viruses *= 2;
}
ctx->virname[ctx->num_viruses++] = virname;
ctx->virname[ctx->num_viruses] = NULL;

Loading…
Cancel
Save