* 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;
|
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
|
gboolean
|
||||||
mu_contacts_add (MuContacts *self, const char *addr, const char *name,
|
mu_contacts_add (MuContacts *self, const char *addr, const char *name,
|
||||||
gboolean personal, time_t tstamp)
|
gboolean personal, time_t tstamp)
|
||||||
@ -251,10 +281,16 @@ mu_contacts_add (MuContacts *self, const char *addr, const char *name,
|
|||||||
* empty name */
|
* empty name */
|
||||||
group = encode_email_address (addr);
|
group = encode_email_address (addr);
|
||||||
|
|
||||||
|
|
||||||
cinfo = (ContactInfo*) g_hash_table_lookup (self->_hash, group);
|
cinfo = (ContactInfo*) g_hash_table_lookup (self->_hash, group);
|
||||||
if (!cinfo || (cinfo->_tstamp < tstamp && !mu_str_is_empty(name))) {
|
if (!cinfo || (cinfo->_tstamp < tstamp && !mu_str_is_empty(name))) {
|
||||||
|
char *addr_dc;
|
||||||
ContactInfo *ci;
|
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,
|
name ? g_strdup(name) : NULL, personal,
|
||||||
tstamp);
|
tstamp);
|
||||||
g_hash_table_insert (self->_hash, g_strdup(group), ci);
|
g_hash_table_insert (self->_hash, g_strdup(group), ci);
|
||||||
|
|||||||
Reference in New Issue
Block a user