|
|
|
@ -115,7 +115,7 @@ static char *iso_string(iso9660_t *iso, const void *src, unsigned int len) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, unsigned int scanall) { |
|
|
|
|
static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len) { |
|
|
|
|
cli_ctx *ctx = iso->ctx; |
|
|
|
|
int ret = CL_CLEAN; |
|
|
|
|
int viruses_found = 0; |
|
|
|
@ -186,8 +186,9 @@ static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, u |
|
|
|
|
ret = cli_matchmeta(ctx, iso->buf, filesz, filesz, 0, 0, 0, NULL); |
|
|
|
|
if (ret == CL_VIRUS) { |
|
|
|
|
viruses_found = 1; |
|
|
|
|
if (!scanall) |
|
|
|
|
if (!SCAN_ALL) |
|
|
|
|
break; |
|
|
|
|
ret = CL_CLEAN; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(dir[26] || dir[27]) |
|
|
|
@ -195,7 +196,7 @@ static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, u |
|
|
|
|
else { |
|
|
|
|
/* TODO Handle multi-extent ? */ |
|
|
|
|
if(dir[25] & 2) { |
|
|
|
|
ret = iso_parse_dir(iso, fileoff, filesz, scanall); |
|
|
|
|
ret = iso_parse_dir(iso, fileoff, filesz); |
|
|
|
|
} else { |
|
|
|
|
if(cli_checklimits("ISO9660", ctx, filesz, 0, 0) != CL_SUCCESS) |
|
|
|
|
cli_dbgmsg("iso_parse_dir: Skipping overlimit file\n"); |
|
|
|
@ -204,8 +205,9 @@ static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, u |
|
|
|
|
} |
|
|
|
|
if (ret == CL_VIRUS) { |
|
|
|
|
viruses_found = 1; |
|
|
|
|
if (!scanall) |
|
|
|
|
if (!SCAN_ALL) |
|
|
|
|
break; |
|
|
|
|
ret = CL_CLEAN; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
dirsz -= entrysz; |
|
|
|
@ -326,7 +328,7 @@ int cli_scaniso(cli_ctx *ctx, size_t offset) { |
|
|
|
|
i = cli_hashset_init(&iso.dir_blocks, 1024, 80); |
|
|
|
|
if(i != CL_SUCCESS) |
|
|
|
|
return i; |
|
|
|
|
i = iso_parse_dir(&iso, cli_readint32(privol+156+2) + privol[156+1], cli_readint32(privol+156+10), SCAN_ALL); |
|
|
|
|
i = iso_parse_dir(&iso, cli_readint32(privol+156+2) + privol[156+1], cli_readint32(privol+156+10)); |
|
|
|
|
cli_hashset_destroy(&iso.dir_blocks); |
|
|
|
|
if(i == CL_BREAK) |
|
|
|
|
return CL_CLEAN; |
|
|
|
|