... | ... |
@@ -106,7 +106,7 @@ void hash_callback(int fd, unsigned long long size, const unsigned char *md5, co |
106 | 106 |
int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_reason reason, struct cli_ftw_cbdata *data) |
107 | 107 |
{ |
108 | 108 |
struct scan_cb_data *scandata = data->data; |
109 |
- const char *virname; |
|
109 |
+ const char *virname = NULL; |
|
110 | 110 |
const char **virpp = &virname; |
111 | 111 |
int ret; |
112 | 112 |
int type = scandata->type; |
... | ... |
@@ -233,7 +233,7 @@ int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_rea |
233 | 233 |
|
234 | 234 |
if (scandata->options & CL_SCAN_ALLMATCHES) { |
235 | 235 |
virpp = (const char **)*virpp; /* temp hack for scanall mode until api augmentation */ |
236 |
- virname = virpp[0]; |
|
236 |
+ if (virpp) virname = virpp[0]; |
|
237 | 237 |
} |
238 | 238 |
|
239 | 239 |
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 |
244 | 244 |
return ret == CL_ETIMEOUT ? ret : CL_BREAK; |
245 | 245 |
} |
246 | 246 |
|
247 |
+ if ((ret == CL_VIRUS) && (virname == NULL)) { |
|
248 |
+ logg("*%s: reported infected but no virname returned!\n", filename); |
|
249 |
+ ret = CL_EMEM; |
|
250 |
+ } |
|
251 |
+ |
|
247 | 252 |
if (ret == CL_VIRUS) { |
248 | 253 |
scandata->infected++; |
249 | 254 |
if (conn_reply_virus(scandata->conn, filename, virname) == -1) { |
... | ... |
@@ -841,17 +841,19 @@ void cli_append_virus(cli_ctx * ctx, const char * virname) |
841 | 841 |
return; |
842 | 842 |
if (SCAN_ALL) { |
843 | 843 |
if (ctx->size_viruses == 0) { |
844 |
- ctx->size_viruses = 2; |
|
845 | 844 |
if (!(ctx->virname = malloc(ctx->size_viruses * sizeof(char *)))) { |
846 | 845 |
cli_errmsg("cli_append_virus: fails on malloc() - virus %s virname not appended.\n", virname); |
847 | 846 |
return; |
848 | 847 |
} |
848 |
+ ctx->size_viruses = 2; |
|
849 | 849 |
} else if (ctx->num_viruses+1 == ctx->size_viruses) { |
850 |
- ctx->size_viruses *= 2; |
|
851 |
- if ((ctx->virname = realloc((void *)ctx->virname, ctx->size_viruses * sizeof (char *))) == NULL) { |
|
850 |
+ void * newptr = NULL; |
|
851 |
+ if ((newptr = realloc((void *)ctx->virname, 2 * ctx->size_viruses * sizeof (char *))) == NULL) { |
|
852 | 852 |
cli_errmsg("cli_append_virus: fails on realloc() - virus %s virname not appended.\n", virname); |
853 | 853 |
return; |
854 | 854 |
} |
855 |
+ ctx->virname = newptr; |
|
856 |
+ ctx->size_viruses *= 2; |
|
855 | 857 |
} |
856 | 858 |
ctx->virname[ctx->num_viruses++] = virname; |
857 | 859 |
ctx->virname[ctx->num_viruses] = NULL; |