From: Jani Nikula Date: Tue, 13 Sep 2016 17:14:20 +0000 (+0300) Subject: cli/reply: do not parse Reply-To: header into internet address list twice X-Git-Tag: 0.23_rc0~26 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=932c0ff879ddaf38f1e4ae325c061132d6af1026;hp=536b1f9df989915161024d2334e206f538d59f9b cli/reply: do not parse Reply-To: header into internet address list twice Avoid parsing Reply-To: header into internet address list twice. Move the parsing outside of reply_to_header_is_redundant(), and pass the parsed internet address list in as parameter. This also avoids leaking the memory of one copy of the internet address list. --- diff --git a/notmuch-reply.c b/notmuch-reply.c index 98034485..cf4248bd 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -231,19 +231,18 @@ scan_address_list (InternetAddressList *list, * in either the 'To' or 'Cc' header of the message? */ static int -reply_to_header_is_redundant (notmuch_message_t *message, const char *reply_to) +reply_to_header_is_redundant (notmuch_message_t *message, + InternetAddressList *reply_to_list) { const char *to, *cc, *addr; - InternetAddressList *list; InternetAddress *address; InternetAddressMailbox *mailbox; - list = internet_address_list_parse_string (reply_to); - - if (internet_address_list_length (list) != 1) + if (reply_to_list == NULL || + internet_address_list_length (reply_to_list) != 1) return 0; - address = internet_address_list_get_address (list, 0); + address = internet_address_list_get_address (reply_to_list, 0); if (INTERNET_ADDRESS_IS_GROUP (address)) return 0; @@ -269,6 +268,8 @@ static InternetAddressList *get_sender(notmuch_message_t *message, reply_to = g_mime_message_get_reply_to (mime_message); if (reply_to && *reply_to) { + InternetAddressList *reply_to_list; + /* * Some mailing lists munge the Reply-To header despite it * being A Bad Thing, see @@ -282,8 +283,11 @@ static InternetAddressList *get_sender(notmuch_message_t *message, * to the list. Note that the address in the Reply-To header * will always appear in the reply if reply_all is true. */ - if (! reply_to_header_is_redundant (message, reply_to)) - return internet_address_list_parse_string (reply_to); + reply_to_list = internet_address_list_parse_string (reply_to); + if (! reply_to_header_is_redundant (message, reply_to_list)) + return reply_to_list; + + g_object_unref (G_OBJECT (reply_to_list)); } return internet_address_list_parse_string (