[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b

Török Edvin edwin at clamav.net
Sun Apr 4 01:08:10 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 727e05603d1c116c94c8b93c157662f245a50650
Author: Török Edvin <edwin at clamav.net>
Date:   Sat Oct 24 14:28:11 2009 +0300

    Fix error path leak (bb #1711).

diff --git a/ChangeLog b/ChangeLog
index 4962902..ffbe77d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Oct 24 14:27:10 EEST 2009 (edwin)
+------------------------------------
+ * clamd/scanner.c, libclamav/others_common.c: fix error path leak (bb #1711)
+
 Fri Oct 23 20:48:12 CEST 2009 (acab)
 ------------------------------------
  * libclamav/unarj: fix error path leaks and valgrind warnings
diff --git a/clamd/scanner.c b/clamd/scanner.c
index b50730e..bae37a4 100644
--- a/clamd/scanner.c
+++ b/clamd/scanner.c
@@ -84,6 +84,8 @@ int scan_callback(struct stat *sb, char *filename, const char *msg, enum cli_ftw
     if (send(scandata->conn->sd, &ret, 0, 0) == -1 && errno != EINTR) {
 	logg("$Client disconnected while command was active!\n");
 	thrmgr_group_terminate(scandata->conn->group);
+	if (reason == visit_file)
+	    free(filename);
 	return CL_BREAK;
     }
 
@@ -178,8 +180,10 @@ int scan_callback(struct stat *sb, char *filename, const char *msg, enum cli_ftw
     }
 
     if (access(filename, R_OK)) {
-	if (conn_reply(scandata->conn, filename, "Access denied.", "ERROR") == -1)
+	if (conn_reply(scandata->conn, filename, "Access denied.", "ERROR") == -1) {
+	    free(filename);
 	    return CL_ETIMEOUT;
+	}
 	logg("*Access denied: %s\n", filename);
 	scandata->errors++;
 	free(filename);
@@ -192,20 +196,25 @@ int scan_callback(struct stat *sb, char *filename, const char *msg, enum cli_ftw
     thrmgr_setactivetask(NULL, NULL);
 
     if (thrmgr_group_need_terminate(scandata->conn->group)) {
+	free(filename);
 	logg("*Client disconnected while scanjob was active\n");
 	return ret == CL_ETIMEOUT ? ret : CL_BREAK;
     }
 
     if (ret == CL_VIRUS) {
 	scandata->infected++;
-	if (conn_reply(scandata->conn, filename, virname, "FOUND") == -1)
+	if (conn_reply(scandata->conn, filename, virname, "FOUND") == -1) {
+	    free(filename);
 	    return CL_ETIMEOUT;
+	}
 	logg("~%s: %s FOUND\n", filename, virname);
 	virusaction(filename, virname, scandata->opts);
     } else if (ret != CL_CLEAN) {
 	scandata->errors++;
-	if (conn_reply(scandata->conn, filename, cl_strerror(ret), "ERROR") == -1)
+	if (conn_reply(scandata->conn, filename, cl_strerror(ret), "ERROR") == -1) {
+	    free(filename);
 	    return CL_ETIMEOUT;
+	}
 	logg("~%s: %s ERROR\n", filename, cl_strerror(ret));
     } else if (logok) {
 	logg("~%s: OK\n", filename);
diff --git a/libclamav/others_common.c b/libclamav/others_common.c
index 7f3f619..12eb309 100644
--- a/libclamav/others_common.c
+++ b/libclamav/others_common.c
@@ -694,6 +694,10 @@ static int cli_ftw_dir(const char *dirname, int flags, int maxdepth, cli_ftw_cb
 		if (ret != CL_SUCCESS)
 		    break;
 	    }
+	    for (i++;i<entries_cnt;i++) {
+		struct dirent_data *entry = &entries[i];
+		free(entry->filename);
+	    }
 	    free(entries);
 	}
     } else {

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list