From 076941712c842f6518c207ac8305eb19c4853ff0 Mon Sep 17 00:00:00 2001 From: Dimitrios Apostolou Date: Thu, 26 Oct 2017 14:40:22 +0200 Subject: [PATCH] CFE-2712: Fix memory leak in cf-execd, triggered when sending email failed. Changelog: title (cherry picked from commit eaaa252f0a3736a82decac3a571755ad8a788606) --- cf-execd/cf-execd-runner.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/cf-execd/cf-execd-runner.c b/cf-execd/cf-execd-runner.c index ca1de2e270e..081d9614070 100644 --- a/cf-execd/cf-execd-runner.c +++ b/cf-execd/cf-execd-runner.c @@ -569,13 +569,14 @@ int ConnectToSmtpSocket(const ExecConfig *config) static void MailResult(const ExecConfig *config, const char *file) { - size_t line_size = CF_BUFSIZE; - char *line = xmalloc(line_size); - ssize_t read; + /* Must be initialised to NULL, so that free(line) works + when goto mail_err. */ + char *line = NULL; #if defined __linux__ || defined __NetBSD__ || defined __FreeBSD__ || defined __OpenBSD__ time_t now = time(NULL); #endif + Log(LOG_LEVEL_VERBOSE, "Mail report: sending result..."); { @@ -739,14 +740,18 @@ static void MailResult(const ExecConfig *config, const char *file) Log(LOG_LEVEL_DEBUG, "Mail report: %s", vbuff); send(sd, vbuff, strlen(vbuff), 0); + size_t line_size = CF_BUFSIZE; + line = xmalloc(line_size); + ssize_t n_read; + int count = 0; - while ((read = CfReadLine(&line, &line_size, fp)) > 0) + while ((n_read = CfReadLine(&line, &line_size, fp)) > 0) { if (LineIsFiltered(config, line)) { continue; } - if (send(sd, line, read, 0) == -1 || + if (send(sd, line, n_read, 0) == -1 || send(sd, "\r\n", 2, 0) == -1) { Log(LOG_LEVEL_ERR, "Error while sending mail to mailserver "