Browse code

fix memory leaks

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

Tomasz Kojm authored on 2004/07/31 02:07:31
Showing 4 changed files
... ...
@@ -1,3 +1,7 @@
1
+Fri Jul 30 19:02:42 CEST 2004 (tk)
2
+----------------------------------
3
+  * libclamav: fix (small) memory leaks
4
+
1 5
 Fri Jul 30 18:13:26 CEST 2004 (tk)
2 6
 ----------------------------------
3 7
   * libclamav: matcher-bm: really ignore short signatures
... ...
@@ -76,7 +76,7 @@ extern "C"
76 76
 
77 77
 
78 78
 struct cli_bm_patt {
79
-    const char *pattern;
79
+    char *pattern;
80 80
     char *virname;
81 81
     int length; 
82 82
     struct cli_bm_patt *next;
... ...
@@ -222,6 +222,10 @@ void cl_free(struct cl_node *root)
222 222
 	    while(pt) {
223 223
 		h = pt;
224 224
 		pt = pt->next;
225
+		free(h->md5);
226
+		free(h->virname);
227
+		if(h->viralias)
228
+		    free(h->viralias);
225 229
 		free(h);
226 230
 	    }
227 231
 	}
... ...
@@ -340,8 +340,10 @@ int cli_parse_add(struct cl_node *root, const char *virname, const char *hexsig,
340 340
 	if(!bm_new)
341 341
 	    return CL_EMEM;
342 342
 
343
-	if(!(bm_new->pattern = cli_hex2str(hexsig)))
343
+	if(!(bm_new->pattern = cli_hex2str(hexsig))) {
344
+	    free(bm_new);
344 345
 	    return CL_EMALFDB;
346
+	}
345 347
 
346 348
 	bm_new->length = strlen(hexsig) / 2;
347 349
 
... ...
@@ -351,11 +353,13 @@ int cli_parse_add(struct cl_node *root, const char *virname, const char *hexsig,
351 351
 	    virlen = strlen(virname);
352 352
 
353 353
 	if(virlen <= 0) {
354
+	    free(bm_new->pattern);
354 355
 	    free(bm_new);
355 356
 	    return CL_EMALFDB;
356 357
 	}
357 358
 
358 359
 	if((bm_new->virname = cli_calloc(virlen + 1, sizeof(char))) == NULL) {
360
+	    free(bm_new->pattern);
359 361
 	    free(bm_new);
360 362
 	    return CL_EMEM;
361 363
 	}
... ...
@@ -367,6 +371,9 @@ int cli_parse_add(struct cl_node *root, const char *virname, const char *hexsig,
367 367
 
368 368
 	if((ret = cli_bm_addpatt(root, bm_new))) {
369 369
 	    cli_errmsg("cli_parse_add(): Problem adding signature\n");
370
+	    free(bm_new->pattern);
371
+	    free(bm_new->virname);
372
+	    free(bm_new);
370 373
 	    return ret;
371 374
 	}
372 375
     }