* mu-contacts: convert the domain part of ascii-domains to lowercase
This commit is contained in:
@ -236,6 +236,36 @@ encode_email_address (const char *addr)
|
||||
return enc;
|
||||
}
|
||||
|
||||
|
||||
/* downcase the domain-part of the email address, but only if it
|
||||
* consists of ascii (to prevent screwing up idna addresses)
|
||||
*/
|
||||
char*
|
||||
downcase_domain_maybe (const char *addr)
|
||||
{
|
||||
char *addr_conv, *at, *cur;
|
||||
|
||||
addr_conv = g_strdup (addr);
|
||||
|
||||
if (!(at = strchr (addr_conv, '@'))) { /*huh?*/
|
||||
g_free (addr_conv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (cur = at + 1; *cur; ++cur) {
|
||||
if (isascii(*cur))
|
||||
*cur = g_ascii_tolower (*cur);
|
||||
else { /* non-ascii; return the unchanged original */
|
||||
g_free (addr_conv);
|
||||
return g_strdup (addr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return addr_conv;
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
mu_contacts_add (MuContacts *self, const char *addr, const char *name,
|
||||
gboolean personal, time_t tstamp)
|
||||
@ -251,10 +281,16 @@ mu_contacts_add (MuContacts *self, const char *addr, const char *name,
|
||||
* empty name */
|
||||
group = encode_email_address (addr);
|
||||
|
||||
|
||||
cinfo = (ContactInfo*) g_hash_table_lookup (self->_hash, group);
|
||||
if (!cinfo || (cinfo->_tstamp < tstamp && !mu_str_is_empty(name))) {
|
||||
char *addr_dc;
|
||||
ContactInfo *ci;
|
||||
ci = contact_info_new (g_strdup(addr),
|
||||
|
||||
if (!(addr_dc = downcase_domain_maybe (addr)))
|
||||
return FALSE;
|
||||
|
||||
ci = contact_info_new (addr_dc,
|
||||
name ? g_strdup(name) : NULL, personal,
|
||||
tstamp);
|
||||
g_hash_table_insert (self->_hash, g_strdup(group), ci);
|
||||
|
||||
Reference in New Issue
Block a user