summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch')
-rw-r--r--mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch161
1 files changed, 161 insertions, 0 deletions
diff --git a/mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch b/mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch
new file mode 100644
index 000000000000..3340a00c5ea7
--- /dev/null
+++ b/mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch
@@ -0,0 +1,161 @@
+--- branches/gnome-2-24/mail/mail-config.c 2008/11/07 06:34:14 36759
++++ branches/gnome-2-24/mail/mail-config.c 2008/12/16 12:29:17 36904
+@@ -778,53 +778,67 @@
+ return (EAccount *) e_account_list_find (config->accounts, E_ACCOUNT_FIND_UID, uid);
+ }
+
++static gboolean
++mail_config_account_url_equal (const CamelURL *u1,
++ const CamelURL *u2)
++{
++ /* For the purpose of matching a URL to an EAccount, only compare
++ * the protocol, user, host and port and disregard the rest. */
++
++ if (g_strcmp0 (u1->protocol, u2->protocol) != 0)
++ return FALSE;
++
++ if (g_strcmp0 (u1->user, u2->user) != 0)
++ return FALSE;
++
++ if (g_strcmp0 (u1->host, u2->host) != 0)
++ return FALSE;
++
++ return (u1->port == u2->port);
++}
++
+ EAccount *
+ mail_config_get_account_by_source_url (const char *source_url)
+ {
+ EAccount *account = NULL;
+ EIterator *iter;
++ CamelURL *url;
+
+ g_return_val_if_fail (source_url != NULL, NULL);
+
++ url = camel_url_new (source_url, NULL);
++ g_return_val_if_fail (url != NULL, NULL);
++
+ iter = e_list_get_iterator ((EList *) config->accounts);
+- while (e_iterator_is_valid (iter)) {
+- CamelURL *url;
+- gchar *string;
++ while (account == NULL && e_iterator_is_valid (iter)) {
++ CamelURL *account_url;
+
+ account = (EAccount *) e_iterator_get (iter);
+
+ e_iterator_next (iter);
+
+- if (account->source == NULL)
+- continue;
+-
+- else if (account->source->url == NULL)
+- continue;
+-
+- else if (*account->source->url == '\0')
++ if ( !account || (account->source == NULL) ||
++ (account->source->url == NULL) || (*account->source->url == '\0')) {
++ account = NULL;
+ continue;
++ }
+
+- url = camel_url_new (account->source->url, NULL);
+- if (url == NULL)
++ account_url = camel_url_new (account->source->url, NULL);
++ if (account_url == NULL) {
++ account = NULL;
+ continue;
++ }
+
+- /* Simplify the account URL for comparison. */
+- string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
+- if (string == NULL || strcmp (string, source_url) != 0)
++ if (!mail_config_account_url_equal (url, account_url))
+ account = NULL; /* not a match */
+
+- camel_url_free (url);
+- g_free (string);
+-
+- if (account != NULL) {
+- g_object_unref (iter);
+- return account;
+- }
++ camel_url_free (account_url);
+ }
+
+ g_object_unref (iter);
++ camel_url_free (url);
+
+- return NULL;
++ return account;
+ }
+
+ EAccount *
+@@ -832,48 +846,43 @@
+ {
+ EAccount *account = NULL;
+ EIterator *iter;
++ CamelURL *url;
+
+ g_return_val_if_fail (transport_url != NULL, NULL);
+
++ url = camel_url_new (transport_url, NULL);
++ g_return_val_if_fail (url != NULL, NULL);
++
+ iter = e_list_get_iterator ((EList *) config->accounts);
+- while (e_iterator_is_valid (iter)) {
+- CamelURL *url;
+- gchar *string;
++ while (account == NULL && e_iterator_is_valid (iter)) {
++ CamelURL *account_url;
+
+ account = (EAccount *) e_iterator_get (iter);
+
+ e_iterator_next (iter);
+
+- if (account->transport == NULL)
+- continue;
+-
+- else if (account->transport->url == NULL)
+- continue;
+-
+- else if (*account->transport->url == '\0')
+- continue;
++ if ( !account || (account->transport == NULL) ||
++ (account->transport->url == NULL) || (*account->transport->url == '\0')) {
++ account = NULL;
++ continue;
++ }
+
+- url = camel_url_new (account->transport->url, NULL);
+- if (url == NULL)
++ account_url = camel_url_new (account->transport->url, NULL);
++ if (account_url == NULL) {
++ account = NULL;
+ continue;
++ }
+
+- /* Simplify the account URL for comparison. */
+- string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
+- if (string == NULL || strcmp (string, transport_url) != 0)
++ if (!mail_config_account_url_equal (url, account_url))
+ account = NULL; /* not a match */
+
+- camel_url_free (url);
+- g_free (string);
+-
+- if (account != NULL) {
+- g_object_unref (iter);
+- return account;
+- }
++ camel_url_free (account_url);
+ }
+
+ g_object_unref (iter);
++ camel_url_free (url);
+
+- return NULL;
++ return account;
+ }
+
+ int