diff options
author | Milan Crha <mcrha@redhat.com> | 2016-02-11 18:37:29 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2016-02-11 18:42:20 +0100 |
commit | 61cb6e7aa60dda6ed795ba491735732341b73f69 (patch) | |
tree | a60a2111ee7812f3d84c1822f05307ba7c9c641a | |
parent | ef640e0241f388acab923549d36c25d0254039a4 (diff) | |
download | evolution-data-server-61cb6e7aa60dda6ed795ba491735732341b73f69.tar.gz |
Bug 760951 - Cannot copy contact from Google to WebDAV addressbook
-rw-r--r-- | addressbook/backends/webdav/e-book-backend-webdav.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/addressbook/backends/webdav/e-book-backend-webdav.c b/addressbook/backends/webdav/e-book-backend-webdav.c index b84cc6d17..bcfc6fc6c 100644 --- a/addressbook/backends/webdav/e-book-backend-webdav.c +++ b/addressbook/backends/webdav/e-book-backend-webdav.c @@ -1458,6 +1458,27 @@ book_backend_webdav_open_sync (EBookBackend *backend, } static gboolean +webdav_can_use_uid (const gchar *uid) +{ + const gchar *ptr; + + if (!uid || !*uid) + return FALSE; + + for (ptr = uid; *ptr; ptr++) { + if ((*ptr >= 'a' && *ptr <= 'z') || + (*ptr >= 'A' && *ptr <= 'Z') || + (*ptr >= '0' && *ptr <= '9') || + strchr (".-@", *ptr) != NULL) + continue; + + return FALSE; + } + + return TRUE; +} + +static gboolean book_backend_webdav_create_contacts_sync (EBookBackend *backend, const gchar * const *vcards, GQueue *out_contacts, @@ -1495,7 +1516,7 @@ book_backend_webdav_create_contacts_sync (EBookBackend *backend, contact = e_contact_new_from_vcard (vcards[0]); orig_uid = e_contact_get_const (contact, E_CONTACT_UID); - if (orig_uid && *orig_uid && !e_book_backend_cache_check_contact (webdav->priv->cache, orig_uid)) { + if (orig_uid && *orig_uid && webdav_can_use_uid (orig_uid) && !e_book_backend_cache_check_contact (webdav->priv->cache, orig_uid)) { uid = g_strdup (orig_uid); } else { uid = NULL; |