<<< Date Index >>>     <<< Thread Index >>>

[PATCH] mutt_gen_msgid() allocates the msgid off of the heap



1 file changed, 5 insertions(+), 2 deletions(-)
sendlib.c |    7 +++++--


# HG changeset patch
# User Erik Hovland <erik@xxxxxxxxxxx>
# Date 1229466703 28800
# Branch HEAD
# Node ID cc483a58bfbda95208eded019fe620297f31a76d
# Parent  94317019739335b9869b4e3f9c4cfef689dda58b
mutt_gen_msgid() allocates the msgid off of the heap.

Since mutt_gen_msgid() allocates the msgid string with
strdup, it is getting it off of the heap.

When the fprintf writes the msgid, the string is no longer
tracked and that string is leaked.

diff --git a/sendlib.c b/sendlib.c
--- a/sendlib.c
+++ b/sendlib.c
@@ -2342,6 +2342,7 @@
   if ((f = safe_fopen (tempfile, "w")) != NULL)
   {
     int ch_flags = CH_XMIT | CH_NONEWLINE | CH_NOQFROM;
+    char* msgid_str;
     
     if (!option (OPTBOUNCEDELIVERED))
       ch_flags |= CH_WEED_DELIVERED;
@@ -2349,13 +2350,15 @@
     fseeko (fp, h->offset, 0);
     fprintf (f, "Resent-From: %s", resent_from);
     fprintf (f, "\nResent-%s", mutt_make_date (date, sizeof(date)));
-    fprintf (f, "Resent-Message-ID: %s\n", mutt_gen_msgid());
+    msgid_str = mutt_gen_msgid();
+    fprintf (f, "Resent-Message-ID: %s\n", msgid_str);
     fputs ("Resent-To: ", f);
     mutt_write_address_list (to, f, 11, 0);
     mutt_copy_header (fp, h, f, ch_flags, NULL);
     fputc ('\n', f);
     mutt_copy_bytes (fp, f, h->content->length);
-    fclose (f);
+    safe_fclose (&f);
+    safe_free (&msgid_str);
 
 #if USE_SMTP
     if (SmtpUrl)