talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit d07722d7d00132463f5a86266c22140a69aa477a
parent a16bc33909360086bb72908c3cc983e97ee9ebaa
Author: Ricardo Mones <ricardo@mones.org>
Date:   Fri, 25 Oct 2013 14:09:00 +0200

Fix bug #2210, but not on Address Book

Bug report is titled 'Display name with invalid addresses not quoted
when inserted from address book', but the real problem is not the AB.

AB doesn't care about the address format or validity, the problem is
sending those addresses to the SMTP server, which, as seen in the wild¹,
might care.

Fix quotes all addresses which need quoting just before writting the
message to the queue folder.

¹http://lists.claws-mail.org/pipermail/users/2013-October/007485.html

Diffstat:
Msrc/compose.c | 46+++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/src/compose.c b/src/compose.c @@ -6129,6 +6129,44 @@ static int compose_add_attachments(Compose *compose, MimeInfo *parent) return 0; } +static gchar *compose_quote_list_of_addresses(gchar *str) +{ + GSList *list = NULL, *item = NULL; + gchar *qname = NULL, *faddr = NULL, *result = NULL; + + list = address_list_append_with_comments(list, str); + for (item = list; item != NULL; item = item->next) { + gchar *spec = item->data; + gchar *endofname = strstr(spec, " <"); + *endofname = '\0'; + QUOTE_IF_REQUIRED_NORMAL(qname, spec, return NULL); + *endofname = ' '; + if (*qname != *spec) { /* has been quoted, compute new */ + gchar *addr = g_strdup(endofname); + gchar *name = g_strdup(qname); + faddr = g_strconcat(name, addr, NULL); + g_free(name); + g_free(addr); + debug_print("new auto-quoted address: '%s'", faddr); + } + if (result == NULL) + result = g_strdup((faddr != NULL)? faddr: spec); + else { + result = g_strconcat(result, + ", ", + (faddr != NULL)? faddr: spec, + NULL); + } + if (faddr != NULL) { + g_free(faddr); + faddr = NULL; + } + } + slist_free_strings_full(list); + + return result; +} + #define IS_IN_CUSTOM_HEADER(header) \ (compose->account->add_customhdr && \ custom_header_find(compose->account->customhdr_list, header) != NULL) @@ -6161,9 +6199,11 @@ static void compose_add_headerfield_from_headerlist(Compose *compose, headerentryname = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((headerentry->combo))))); if (!g_utf8_collate(trans_fieldname, headerentryname)) { - str = gtk_editable_get_chars(GTK_EDITABLE(headerentry->entry), 0, -1); - g_strstrip(str); - if (str[0] != '\0') { + gchar * ustr = gtk_editable_get_chars(GTK_EDITABLE(headerentry->entry), 0, -1); + g_strstrip(ustr); + str = compose_quote_list_of_addresses(ustr); + g_free(ustr); + if (str != NULL && str[0] != '\0') { if (add_field) g_string_append(fieldstr, seperator); g_string_append(fieldstr, str);