Browse code

libclamav: pe: fix memory leak

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@675 77e5149b-7576-45b1-b177-96237e5ba77b

Tomasz Kojm authored on 2004/07/20 04:30:13
Showing 3 changed files
... ...
@@ -62,6 +62,7 @@ Code patches submitted by (in alphabetical order):
62 62
 
63 63
 Kamil Andrusz <wizz*mniam.net>
64 64
 Patrick Bihan-Faou <patrick*mindstep.com>
65
+Martin Blapp <mb*imp.ch>
65 66
 Len Budney <lbudney*pobox.com>
66 67
 Andrey Cherezov <andrey*cherezov.koenig.su>
67 68
 Alex Cherney <alex*cher.id.au>
... ...
@@ -1,3 +1,7 @@
1
+Mon Jul 19 21:24:18 CEST 2004 (tk)
2
+----------------------------------
3
+  * libclamav: pe: fix memory leak (Martin Blapp <mb*imp.ch>)
4
+
1 5
 Mon Jul 19 19:46:03 CEST 2004 (tk)
2 6
 ----------------------------------
3 7
   * libclamav: use new, faster and memory efficient algorithm (multipattern
... ...
@@ -473,11 +473,13 @@ int cli_scanpe(int desc, const char **virname, long int *scanned, const struct c
473 473
 
474 474
 	if(limits && limits->maxfilesize && (ssize > limits->maxfilesize || dsize > limits->maxfilesize)) {
475 475
 	    cli_dbgmsg("UPX: Sizes exceeded (ssize: %d, dsize: %d, max: %lu)\n", ssize, dsize , limits->maxfilesize);
476
+	    free(section_hdr);
476 477
 	    return CL_CLEAN;
477 478
 	}
478 479
 
479 480
 	if(ssize <= 0x19 || dsize <= ssize) { /* FIXME: What are reasonable values? */
480 481
 	    cli_dbgmsg("UPX: Size mismatch (ssize: %d, dsize: %d)\n", ssize, dsize);
482
+	    free(section_hdr);
481 483
 	    return CL_CLEAN;
482 484
 	}
483 485
 
... ...
@@ -508,11 +510,16 @@ int cli_scanpe(int desc, const char **virname, long int *scanned, const struct c
508 508
 	if(lseek(desc, ep, SEEK_SET) == -1) {
509 509
 	    cli_dbgmsg("lseek() failed\n");
510 510
 	    free(section_hdr);
511
+	    free(src);
512
+	    free(dest);
511 513
 	    return CL_EIO;
512 514
 	}
513 515
 
514 516
 	if(read(desc, buff, 126) != 126) { /* i.e. 0x69 + 13 + 8 */
515 517
 	    cli_dbgmsg("UPX: Can't read 126 bytes at 0x%x (%d)\n", ep, ep);
518
+	    free(section_hdr);
519
+	    free(src);
520
+	    free(dest);
516 521
 	    return CL_EIO;
517 522
 	} else {
518 523
 	    if(cli_memstr(UPX_NRV2B, 24, buff + 0x69, 13) || cli_memstr(UPX_NRV2B, 24, buff + 0x69 + 8, 13)) {