diff options
author | Sushma Rai <rsushma@src.gnome.org> | 2006-01-27 20:02:57 +0800 |
---|---|---|
committer | Sushma Rai <rsushma@src.gnome.org> | 2006-01-27 20:02:57 +0800 |
commit | 89c42a519884edd815dff38dd8530b7403f350d1 (patch) | |
tree | ea767555b7c2caf89cc75c837a8502aef254d027 /plugins/exchange-operations | |
parent | 2901122f9bef449cbbce0befeacb6bdcf9ee9a18 (diff) | |
download | gsoc2013-evolution-89c42a519884edd815dff38dd8530b7403f350d1.tar.gz gsoc2013-evolution-89c42a519884edd815dff38dd8530b7403f350d1.tar.zst gsoc2013-evolution-89c42a519884edd815dff38dd8530b7403f350d1.zip |
Corrected the memory corruption in forming the URIs. Fixes #328304.
svn path=/trunk/; revision=31323
Diffstat (limited to 'plugins/exchange-operations')
-rw-r--r-- | plugins/exchange-operations/ChangeLog | 10 | ||||
-rw-r--r-- | plugins/exchange-operations/exchange-calendar.c | 38 | ||||
-rw-r--r-- | plugins/exchange-operations/exchange-contacts.c | 32 |
3 files changed, 59 insertions, 21 deletions
diff --git a/plugins/exchange-operations/ChangeLog b/plugins/exchange-operations/ChangeLog index f8eb7544af..ba99313d19 100644 --- a/plugins/exchange-operations/ChangeLog +++ b/plugins/exchange-operations/ChangeLog @@ -1,3 +1,13 @@ +2006-01-27 Sushma Rai <rsushma@novell.com> + + * exchange-calendar.c (e_exchange_calendar_commit): Freeing uri_text + in case of OFFLINE mode. + Instead of terminating memory allocated string tmpruri and using it, + forming the URI string from the EUri and appending the path. + + * exchange-contacts.c (e_exchange_contacts_commit): Similar. + Fixes #328304. + 2006-01-24 Sushma Rai <rsushma@novell.com> * exchange-config-listener.c (exchange_config_listener_authenticate): diff --git a/plugins/exchange-operations/exchange-calendar.c b/plugins/exchange-operations/exchange-calendar.c index c5a3ae9d27..7dfc767222 100644 --- a/plugins/exchange-operations/exchange-calendar.c +++ b/plugins/exchange-operations/exchange-calendar.c @@ -337,8 +337,10 @@ e_exchange_calendar_commit (EPlugin *epl, EConfigTarget *target) } status = exchange_is_offline (&offline_status); - if (offline_status == OFFLINE_MODE || status != CONFIG_LISTENER_STATUS_OK) + if (offline_status == OFFLINE_MODE || status != CONFIG_LISTENER_STATUS_OK) { + g_free (uri_text); return; + } account = exchange_operations_get_exchange_account (); username = exchange_account_get_username (account); @@ -359,19 +361,38 @@ e_exchange_calendar_commit (EPlugin *epl, EConfigTarget *target) /* FIXME: This one would ever occur? */ ftype = g_strdup ("mail"); } + gname = (gchar*) e_source_peek_name (source); gruri = (gchar*) e_source_peek_relative_uri (source); + if (calendar_src_exists) { - gchar *tmpruri, *tmpdelimit; - tmpruri = g_strdup (gruri); - tmpdelimit = g_strrstr (tmpruri, "/"); - tmpdelimit[0] = '\0'; - ruri = g_strconcat (tmpruri, "/", gname, NULL); + gchar *tmpruri, *uri_string; + EUri *euri; + int uri_len; + + /* sample uri_string: exchange://user;auth=NTLM@host/ */ + /* sample uri_text: exchange://user;auth=NTLM@host/;personal/Calendar */ + + euri = e_uri_new (uri_text); + uri_string = e_uri_to_string (euri, FALSE); + e_uri_free (euri); + + /* sample gruri: user;auth=NTLM@host/;personal/Calendar */ + /* sample ruri: user;auth=NTLM@host/personal/Calendar */ + /* sample path: /personal/Calendar */ + + uri_len = strlen (uri_string) + 1; + tmpruri = g_strdup (uri_string + strlen ("exchange://")); + ruri = g_strconcat (tmpruri, uri_text + uri_len, NULL); + path = g_build_filename ("/", uri_text + uri_len, NULL); + oldpath = g_build_filename ("/", calendar_old_source_uri + prefix_len, NULL); + g_free (uri_string); g_free (tmpruri); } else { ruri = g_strconcat (gruri, "/", gname, NULL); + path = g_build_filename ("/", ruri+prefix_len, NULL); } e_source_set_relative_uri (source, ruri); e_source_set_property (source, "username", username); @@ -379,16 +400,13 @@ e_exchange_calendar_commit (EPlugin *epl, EConfigTarget *target) if (authtype) e_source_set_property (source, "auth-type", authtype); e_source_set_property (source, "auth", "1"); - - path = g_build_filename ("/", ruri+prefix_len, NULL); if (!calendar_src_exists) { /* Create the new folder */ result = exchange_account_create_folder (account, path, ftype); } - else if (gruri && strcmp (gruri, calendar_old_source_uri)) { + else if (gruri && strcmp (gruri, calendar_old_source_uri) && strcmp (path, oldpath)) { /* Rename the folder */ - oldpath = g_build_filename ("/", calendar_old_source_uri+prefix_len, NULL); result = exchange_account_xfer_folder (account, oldpath, path, TRUE); exchange_operations_update_child_esources (source, calendar_old_source_uri, diff --git a/plugins/exchange-operations/exchange-contacts.c b/plugins/exchange-operations/exchange-contacts.c index b428b6b032..46ab1f8f7a 100644 --- a/plugins/exchange-operations/exchange-contacts.c +++ b/plugins/exchange-operations/exchange-contacts.c @@ -321,12 +321,13 @@ e_exchange_contacts_commit (EPlugin *epl, EConfigTarget *target) g_free (uri_text); return ; } - g_free (uri_text); exchange_config_listener_get_offline_status (exchange_global_config_listener, &offline_status); - if (offline_status == OFFLINE_MODE) + if (offline_status == OFFLINE_MODE) { + g_free (uri_text); return; + } account = exchange_operations_get_exchange_account (); username = exchange_account_get_username (account); @@ -338,17 +339,29 @@ e_exchange_contacts_commit (EPlugin *epl, EConfigTarget *target) gname = (gchar*) e_source_peek_name (source); gruri = (gchar*) e_source_peek_relative_uri (source); + if (contacts_src_exists) { - gchar *tmpruri, *tmpdelimit; - tmpruri = g_strdup (gruri); - tmpdelimit = g_strrstr (tmpruri, "/"); - tmpdelimit[0] = '\0'; - ruri = g_strconcat (tmpruri, "/", gname, NULL); + gchar *tmpruri, *uri_string; + EUri *euri; + int uri_len; + + euri = e_uri_new (uri_text); + uri_string = e_uri_to_string (euri, FALSE); + e_uri_free (euri); + + uri_len = strlen (uri_string) + 1; + tmpruri = g_strdup (uri_string + strlen ("exchange://")); + ruri = g_strconcat (tmpruri, uri_text + uri_len, NULL); + path = g_build_filename ("/", uri_text + uri_len, NULL); + oldpath = g_build_filename ("/", contacts_old_src_uri + prefix_len, NULL); + g_free (uri_string); g_free (tmpruri); } else { ruri = g_strconcat (gruri, "/", gname, NULL); + path = g_build_filename ("/", ruri+prefix_len, NULL); } + e_source_set_relative_uri (source, ruri); e_source_set_property (source, "username", username); e_source_set_property (source, "auth-domain", "Exchange"); @@ -356,15 +369,12 @@ e_exchange_contacts_commit (EPlugin *epl, EConfigTarget *target) e_source_set_property (source, "auth-type", authtype); e_source_set_property (source, "auth", "plain/password"); - path = g_strdup_printf ("/%s", ruri+prefix_len); - if (!contacts_src_exists) { /* Create the new folder */ result = exchange_account_create_folder (account, path, "contacts"); } - else if (strcmp (gruri, contacts_old_src_uri)) { + else if (gruri && strcmp (gruri, contacts_old_src_uri) && strcmp (path, oldpath)) { /* Rename the folder */ - oldpath = g_strdup_printf ("/%s", contacts_old_src_uri+prefix_len); result = exchange_account_xfer_folder (account, oldpath, path, TRUE); exchange_operations_update_child_esources (source, contacts_old_src_uri, |