X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=notmuch-reply.c;h=f789a14083e0fa444a294cd2e4d2c0c559459806;hb=d7fea369160c548524fd8958ff88d6faacfabe3a;hp=9239aac24a3956e4c3f130dfa5148f77695cd910;hpb=555e2abe9d838bcf16d7e44f8aea69ded8ffd7f4;p=notmuch diff --git a/notmuch-reply.c b/notmuch-reply.c index 9239aac2..f789a140 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -45,7 +45,7 @@ format_part_reply (GMimeStream *stream, mime_node_t *node) } else if (GMIME_IS_MESSAGE (node->part)) { GMimeMessage *message = GMIME_MESSAGE (node->part); InternetAddressList *recipients; - const char *recipients_string; + char *recipients_string; g_mime_stream_printf (stream, "> From: %s\n", g_mime_message_get_sender (message)); recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO); @@ -53,13 +53,15 @@ format_part_reply (GMimeStream *stream, mime_node_t *node) if (recipients_string) g_mime_stream_printf (stream, "> To: %s\n", recipients_string); + g_free (recipients_string); recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC); recipients_string = internet_address_list_to_string (recipients, 0); if (recipients_string) g_mime_stream_printf (stream, "> Cc: %s\n", recipients_string); + g_free (recipients_string); g_mime_stream_printf (stream, "> Subject: %s\n", g_mime_message_get_subject (message)); - g_mime_stream_printf (stream, "> Date: %s\n", g_mime_message_get_date_as_string (message)); + g_mime_stream_printf (stream, "> Date: %s\n", g_mime_message_get_date_string (node, message)); g_mime_stream_printf (stream, ">\n"); } else if (GMIME_IS_PART (node->part)) { GMimeContentType *content_type = g_mime_object_get_content_type (node->part); @@ -266,12 +268,11 @@ reply_to_header_is_redundant (GMimeMessage *message, static InternetAddressList *get_sender(GMimeMessage *message) { - const char *reply_to; - - reply_to = g_mime_message_get_reply_to (message); - if (reply_to && *reply_to) { - InternetAddressList *reply_to_list; + InternetAddressList *reply_to_list; + reply_to_list = g_mime_message_get_reply_to_list (message); + if (reply_to_list && + internet_address_list_length (reply_to_list) > 0) { /* * Some mailing lists munge the Reply-To header despite it * being A Bad Thing, see @@ -285,7 +286,6 @@ static InternetAddressList *get_sender(GMimeMessage *message) * to the list. Note that the address in the Reply-To header * will always appear in the reply if reply_all is true. */ - reply_to_list = internet_address_list_parse_string (reply_to); if (! reply_to_header_is_redundant (message, reply_to_list)) return reply_to_list; @@ -329,6 +329,12 @@ add_recipients_from_message (GMimeMessage *reply, GMimeMessage *message, notmuch_bool_t reply_all) { + + /* There is a memory leak here with gmime-2.6 because get_sender + * returns a newly allocated list, while the others return + * references to libgmime owned data. This leak will be fixed with + * the transition to gmime-3.0. + */ struct { InternetAddressList * (*get_header)(GMimeMessage *message); GMimeRecipientType recipient_type; @@ -627,7 +633,7 @@ static int do_reply(notmuch_config_t *config, return 1; if (count != 1) { - fprintf (stderr, "Error: search term did not match precisely one message (matched %d messages).\n", count); + fprintf (stderr, "Error: search term did not match precisely one message (matched %u messages).\n", count); return 1; }