...
|
...
|
@@ -115,7 +115,7 @@ static char *iso_string(iso9660_t *iso, const void *src, unsigned int len) {
|
115
|
115
|
}
|
116
|
116
|
|
117
|
117
|
|
118
|
|
-static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, unsigned int scanall) {
|
|
118
|
+static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len) {
|
119
|
119
|
cli_ctx *ctx = iso->ctx;
|
120
|
120
|
int ret = CL_CLEAN;
|
121
|
121
|
int viruses_found = 0;
|
...
|
...
|
@@ -186,8 +186,9 @@ static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, u
|
186
|
186
|
ret = cli_matchmeta(ctx, iso->buf, filesz, filesz, 0, 0, 0, NULL);
|
187
|
187
|
if (ret == CL_VIRUS) {
|
188
|
188
|
viruses_found = 1;
|
189
|
|
- if (!scanall)
|
|
189
|
+ if (!SCAN_ALL)
|
190
|
190
|
break;
|
|
191
|
+ ret = CL_CLEAN;
|
191
|
192
|
}
|
192
|
193
|
|
193
|
194
|
if(dir[26] || dir[27])
|
...
|
...
|
@@ -195,7 +196,7 @@ static int iso_parse_dir(iso9660_t *iso, unsigned int block, unsigned int len, u
|
195
|
195
|
else {
|
196
|
196
|
/* TODO Handle multi-extent ? */
|
197
|
197
|
if(dir[25] & 2) {
|
198
|
|
- ret = iso_parse_dir(iso, fileoff, filesz, scanall);
|
|
198
|
+ ret = iso_parse_dir(iso, fileoff, filesz);
|
199
|
199
|
} else {
|
200
|
200
|
if(cli_checklimits("ISO9660", ctx, filesz, 0, 0) != CL_SUCCESS)
|
201
|
201
|
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
|
204
|
204
|
}
|
205
|
205
|
if (ret == CL_VIRUS) {
|
206
|
206
|
viruses_found = 1;
|
207
|
|
- if (!scanall)
|
|
207
|
+ if (!SCAN_ALL)
|
208
|
208
|
break;
|
|
209
|
+ ret = CL_CLEAN;
|
209
|
210
|
}
|
210
|
211
|
}
|
211
|
212
|
dirsz -= entrysz;
|
...
|
...
|
@@ -326,7 +328,7 @@ int cli_scaniso(cli_ctx *ctx, size_t offset) {
|
326
|
326
|
i = cli_hashset_init(&iso.dir_blocks, 1024, 80);
|
327
|
327
|
if(i != CL_SUCCESS)
|
328
|
328
|
return i;
|
329
|
|
- i = iso_parse_dir(&iso, cli_readint32(privol+156+2) + privol[156+1], cli_readint32(privol+156+10), SCAN_ALL);
|
|
329
|
+ i = iso_parse_dir(&iso, cli_readint32(privol+156+2) + privol[156+1], cli_readint32(privol+156+10));
|
330
|
330
|
cli_hashset_destroy(&iso.dir_blocks);
|
331
|
331
|
if(i == CL_BREAK)
|
332
|
332
|
return CL_CLEAN;
|