From 61cb6e7aa60dda6ed795ba491735732341b73f69 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 11 Feb 2016 18:37:29 +0100 Subject: Bug 760951 - Cannot copy contact from Google to WebDAV addressbook --- .../backends/webdav/e-book-backend-webdav.c | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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 @@ -1457,6 +1457,27 @@ book_backend_webdav_open_sync (EBookBackend *backend, return success; } +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, @@ -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; -- cgit v1.2.1