diff options
-rw-r--r-- | addrbook.c | 8 | ||||
-rw-r--r-- | alias.c | 13 | ||||
-rw-r--r-- | init.c | 3 |
3 files changed, 16 insertions, 8 deletions
@@ -227,16 +227,14 @@ new_aliases: { if (AliasTable[i]->tagged) { - mutt_addrlist_to_local (AliasTable[i]->addr); - rfc822_write_address (buf, buflen, AliasTable[i]->addr, 0); + rfc822_write_address (buf, buflen, AliasTable[i]->addr, 1); t = -1; } } - if(t != -1) + if (t != -1) { - mutt_addrlist_to_local (AliasTable[t]->addr); - rfc822_write_address (buf, buflen, AliasTable[t]->addr, 0); + rfc822_write_address (buf, buflen, AliasTable[t]->addr, 1); } mutt_menuDestroy (&menu); @@ -456,7 +456,12 @@ void mutt_alias_add_reverse (ALIAS *t) ADDRESS *ap; if (!t) return; - + + /* Note that the address mailbox should be converted to intl form + * before using as a key in the hash. This is currently done + * by all callers, but added here mostly as documentation.. */ + mutt_addrlist_to_intl (t->addr, NULL); + for (ap = t->addr; ap; ap = ap->next) { if (!ap->group && ap->mailbox) @@ -469,7 +474,11 @@ void mutt_alias_delete_reverse (ALIAS *t) ADDRESS *ap; if (!t) return; - + + /* If the alias addresses were converted to local form, they won't + * match the hash entries. */ + mutt_addrlist_to_intl (t->addr, NULL); + for (ap = t->addr; ap; ap = ap->next) { if (!ap->group && ap->mailbox) @@ -3158,7 +3158,8 @@ void mutt_init (int skip_sys_rc, LIST *commands) err.dptr = err.data; Groups = hash_create (1031, 0); - ReverseAlias = hash_create (1031, MUTT_HASH_STRCASECMP); + /* reverse alias keys need to be strdup'ed because of idna conversions */ + ReverseAlias = hash_create (1031, MUTT_HASH_STRCASECMP | MUTT_HASH_STRDUP_KEYS); mutt_menu_init (); mutt_srandom (); |