unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] fix memory leaks in notmuch-show.c:format_headers_sprinter()
@ 2017-03-16 16:53 Jeffrey Stedfast
  2017-03-17 20:20 ` Tomi Ollila
  0 siblings, 1 reply; 2+ messages in thread
From: Jeffrey Stedfast @ 2017-03-16 16:53 UTC (permalink / raw)
  To: notmuch@notmuchmail.org

[-- Attachment #1: Type: text/plain, Size: 518 bytes --]

Hey guys,

Was just grepping through notmuch sources and discovered what I think are memory leaks in notmuch-show.c’s format_headers_sprinter() code.

Internet_address_list_to_string() and g_mime_message_get_date_as_string() return allocated string buffers and not const, so from what I can tell from taking a look at the sprinter-sexp.c’s sexp_string() function, the code leaks the recipients_string as well as the date string.

Attached is a patch which fixes these leaks.

Hope this helps,

Jeff



[-- Attachment #2: memleak-fixes.patch --]
[-- Type: application/octet-stream, Size: 1747 bytes --]

diff --git a/notmuch-show.c b/notmuch-show.c
index aff93803..095595e2 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -202,8 +202,9 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
      * reflected in the file devel/schemata. */
 
     InternetAddressList *recipients;
-    const char *recipients_string;
+    char *recipients_string;
     const char *reply_to_string;
+    char *date_string;
 
     sp->begin_map (sp);
 
@@ -218,6 +219,7 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
     if (recipients_string) {
 	sp->map_key (sp, "To");
 	sp->string (sp, recipients_string);
+	g_free (recipients_string);
     }
 
     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);
@@ -225,6 +227,7 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
     if (recipients_string) {
 	sp->map_key (sp, "Cc");
 	sp->string (sp, recipients_string);
+	g_free (recipients_string);
     }
 
     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_BCC);
@@ -232,6 +235,7 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
     if (recipients_string) {
 	sp->map_key (sp, "Bcc");
 	sp->string (sp, recipients_string);
+	g_free (recipients_string);
     }
 
     reply_to_string = g_mime_message_get_reply_to (message);
@@ -248,7 +252,9 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
 	sp->string (sp, g_mime_object_get_header (GMIME_OBJECT (message), "References"));
     } else {
 	sp->map_key (sp, "Date");
-	sp->string (sp, g_mime_message_get_date_as_string (message));
+	date_string = g_mime_message_get_date_as_string (message);
+	sp->string (sp, date_string);
+	g_free (date_string);
     }
 
     sp->end (sp);

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] fix memory leaks in notmuch-show.c:format_headers_sprinter()
  2017-03-16 16:53 [PATCH] fix memory leaks in notmuch-show.c:format_headers_sprinter() Jeffrey Stedfast
@ 2017-03-17 20:20 ` Tomi Ollila
  0 siblings, 0 replies; 2+ messages in thread
From: Tomi Ollila @ 2017-03-17 20:20 UTC (permalink / raw)
  To: Jeffrey Stedfast, notmuch@notmuchmail.org

On Thu, Mar 16 2017, Jeffrey Stedfast <jestedfa@microsoft.com> wrote:

> Hey guys,
>
> Was just grepping through notmuch sources and discovered what I think are memory leaks in notmuch-show.c’s format_headers_sprinter() code.
>
> Internet_address_list_to_string() and g_mime_message_get_date_as_string()
> return allocated string buffers and not const, so from what I can tell
> from taking a look at the sprinter-sexp.c’s sexp_string() function, the
> code leaks the recipients_string as well as the date string.

Change looks good, tests pass (it even applied with git am).

The commit message could be amended like so, that subject line and the
paragraph above this were left...

Tomi


>
> Attached is a patch which fixes these leaks.
>
> Hope this helps,

>
> Jeff
>
>
> diff --git a/notmuch-show.c b/notmuch-show.c
> index aff93803..095595e2 100644
> --- a/notmuch-show.c
> +++ b/notmuch-show.c
> @@ -202,8 +202,9 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>       * reflected in the file devel/schemata. */
>  
>      InternetAddressList *recipients;
> -    const char *recipients_string;
> +    char *recipients_string;
>      const char *reply_to_string;
> +    char *date_string;
>  
>      sp->begin_map (sp);
>  
> @@ -218,6 +219,7 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>      if (recipients_string) {
>  	sp->map_key (sp, "To");
>  	sp->string (sp, recipients_string);
> +	g_free (recipients_string);
>      }
>  
>      recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);
> @@ -225,6 +227,7 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>      if (recipients_string) {
>  	sp->map_key (sp, "Cc");
>  	sp->string (sp, recipients_string);
> +	g_free (recipients_string);
>      }
>  
>      recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_BCC);
> @@ -232,6 +235,7 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>      if (recipients_string) {
>  	sp->map_key (sp, "Bcc");
>  	sp->string (sp, recipients_string);
> +	g_free (recipients_string);
>      }
>  
>      reply_to_string = g_mime_message_get_reply_to (message);
> @@ -248,7 +252,9 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>  	sp->string (sp, g_mime_object_get_header (GMIME_OBJECT (message), "References"));
>      } else {
>  	sp->map_key (sp, "Date");
> -	sp->string (sp, g_mime_message_get_date_as_string (message));
> +	date_string = g_mime_message_get_date_as_string (message);
> +	sp->string (sp, date_string);
> +	g_free (date_string);
>      }
>  
>      sp->end (sp);
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> https://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-03-17 20:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-16 16:53 [PATCH] fix memory leaks in notmuch-show.c:format_headers_sprinter() Jeffrey Stedfast
2017-03-17 20:20 ` Tomi Ollila

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).