diff options
| author | Jani Nikula <jani@nikula.org> | 2016-09-13 20:14:20 +0300 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2016-09-17 09:14:20 -0300 |
| commit | 932c0ff879ddaf38f1e4ae325c061132d6af1026 (patch) | |
| tree | 701e3a62818eb9c7dedabd93584d5f962c219fb1 /notmuch-reply.c | |
| parent | 536b1f9df989915161024d2334e206f538d59f9b (diff) | |
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.
Diffstat (limited to 'notmuch-reply.c')
| -rw-r--r-- | notmuch-reply.c | 20 |
1 files changed, 12 insertions, 8 deletions
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 ( |
