[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