git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@1003 77e5149b-7576-45b1-b177-96237e5ba77b
Tomasz Kojm authored on 2004/10/16 06:00:20... | ... |
@@ -1,3 +1,7 @@ |
1 |
+Fri Oct 15 22:56:23 CEST 2004 (tk) |
|
2 |
+---------------------------------- |
|
3 |
+ * libclamav/readdb.c: allow (optional) engine version requirement in sigs |
|
4 |
+ |
|
1 | 5 |
Fri Oct 15 02:23:02 CEST 2004 (tk) |
2 | 6 |
---------------------------------- |
3 | 7 |
* libclamav/special.c: return 1 for other JPEG exploit variants |
... | ... |
@@ -480,7 +480,7 @@ static int cli_loaddb(FILE *fd, struct cl_node **root, unsigned int *signo) |
480 | 480 |
static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) |
481 | 481 |
{ |
482 | 482 |
char buffer[FILEBUFF], *sig, *virname, *offset, *pt; |
483 |
- int line = 0, ret = 0; |
|
483 |
+ int line = 0, sigs = 0, ret = 0; |
|
484 | 484 |
unsigned short target; |
485 | 485 |
|
486 | 486 |
|
... | ... |
@@ -511,6 +511,7 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) |
511 | 511 |
|
512 | 512 |
while(fgets(buffer, FILEBUFF, fd)) { |
513 | 513 |
line++; |
514 |
+ sigs++; |
|
514 | 515 |
cli_chomp(buffer); |
515 | 516 |
|
516 | 517 |
if(!(virname = cli_strtok(buffer, 0, ":"))) { |
... | ... |
@@ -518,8 +519,29 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) |
518 | 518 |
break; |
519 | 519 |
} |
520 | 520 |
|
521 |
+ if((pt = cli_strtok(buffer, 4, ":"))) { |
|
522 |
+ if(!isdigit(*pt)) { |
|
523 |
+ free(virname); |
|
524 |
+ free(pt); |
|
525 |
+ ret = CL_EMALFDB; |
|
526 |
+ break; |
|
527 |
+ } |
|
528 |
+ |
|
529 |
+ if(atoi(pt) > cl_retflevel()) { |
|
530 |
+ cli_warnmsg("Signature for %s requires new ClamAV version. Please update!\n", virname); |
|
531 |
+ sigs--; |
|
532 |
+ free(virname); |
|
533 |
+ free(pt); |
|
534 |
+ continue; |
|
535 |
+ } |
|
536 |
+ |
|
537 |
+ free(pt); |
|
538 |
+ } |
|
539 |
+ |
|
521 | 540 |
if(!(pt = cli_strtok(buffer, 1, ":")) || !isdigit(*pt)) { |
522 | 541 |
free(virname); |
542 |
+ if(pt) |
|
543 |
+ free(pt); |
|
523 | 544 |
ret = CL_EMALFDB; |
524 | 545 |
break; |
525 | 546 |
} |
... | ... |
@@ -568,7 +590,7 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) |
568 | 568 |
} |
569 | 569 |
|
570 | 570 |
if(signo) |
571 |
- *signo += line; |
|
571 |
+ *signo += sigs; |
|
572 | 572 |
|
573 | 573 |
return 0; |
574 | 574 |
} |