Gentoo Archives: gentoo-commits

From: "Arun Raghavan (ford_prefect)" <ford_prefect@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in mail-client/evolution/files: evolution-2.24.2-r2-mail-config-crash-fix.patch
Date: Sat, 27 Dec 2008 19:22:54
Message-Id: E1LGekN-00072I-OB@stork.gentoo.org
1 ford_prefect 08/12/27 19:22:51
2
3 Added: evolution-2.24.2-r2-mail-config-crash-fix.patch
4 Log:
5 Update the mail-config.c patch to fix some more leaks (especially w.r.t. Exchange). Thanks to Derek Dolney <nospam@××××××.com> for finding the cause. Bug #251060
6 (Portage version: 2.2_rc17/cvs/Linux 2.6.27.5 i686)
7
8 Revision Changes Path
9 1.1 mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch
10
11 file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch?rev=1.1&view=markup
12 plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/mail-client/evolution/files/evolution-2.24.2-r2-mail-config-crash-fix.patch?rev=1.1&content-type=text/plain
13
14 Index: evolution-2.24.2-r2-mail-config-crash-fix.patch
15 ===================================================================
16 --- branches/gnome-2-24/mail/mail-config.c 2008/11/07 06:34:14 36759
17 +++ branches/gnome-2-24/mail/mail-config.c 2008/12/16 12:29:17 36904
18 @@ -778,53 +778,67 @@
19 return (EAccount *) e_account_list_find (config->accounts, E_ACCOUNT_FIND_UID, uid);
20 }
21
22 +static gboolean
23 +mail_config_account_url_equal (const CamelURL *u1,
24 + const CamelURL *u2)
25 +{
26 + /* For the purpose of matching a URL to an EAccount, only compare
27 + * the protocol, user, host and port and disregard the rest. */
28 +
29 + if (g_strcmp0 (u1->protocol, u2->protocol) != 0)
30 + return FALSE;
31 +
32 + if (g_strcmp0 (u1->user, u2->user) != 0)
33 + return FALSE;
34 +
35 + if (g_strcmp0 (u1->host, u2->host) != 0)
36 + return FALSE;
37 +
38 + return (u1->port == u2->port);
39 +}
40 +
41 EAccount *
42 mail_config_get_account_by_source_url (const char *source_url)
43 {
44 EAccount *account = NULL;
45 EIterator *iter;
46 + CamelURL *url;
47
48 g_return_val_if_fail (source_url != NULL, NULL);
49
50 + url = camel_url_new (source_url, NULL);
51 + g_return_val_if_fail (url != NULL, NULL);
52 +
53 iter = e_list_get_iterator ((EList *) config->accounts);
54 - while (e_iterator_is_valid (iter)) {
55 - CamelURL *url;
56 - gchar *string;
57 + while (account == NULL && e_iterator_is_valid (iter)) {
58 + CamelURL *account_url;
59
60 account = (EAccount *) e_iterator_get (iter);
61
62 e_iterator_next (iter);
63
64 - if (account->source == NULL)
65 - continue;
66 -
67 - else if (account->source->url == NULL)
68 - continue;
69 -
70 - else if (*account->source->url == '\0')
71 + if ( !account || (account->source == NULL) ||
72 + (account->source->url == NULL) || (*account->source->url == '\0')) {
73 + account = NULL;
74 continue;
75 + }
76
77 - url = camel_url_new (account->source->url, NULL);
78 - if (url == NULL)
79 + account_url = camel_url_new (account->source->url, NULL);
80 + if (account_url == NULL) {
81 + account = NULL;
82 continue;
83 + }
84
85 - /* Simplify the account URL for comparison. */
86 - string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
87 - if (string == NULL || strcmp (string, source_url) != 0)
88 + if (!mail_config_account_url_equal (url, account_url))
89 account = NULL; /* not a match */
90
91 - camel_url_free (url);
92 - g_free (string);
93 -
94 - if (account != NULL) {
95 - g_object_unref (iter);
96 - return account;
97 - }
98 + camel_url_free (account_url);
99 }
100
101 g_object_unref (iter);
102 + camel_url_free (url);
103
104 - return NULL;
105 + return account;
106 }
107
108 EAccount *
109 @@ -832,48 +846,43 @@
110 {
111 EAccount *account = NULL;
112 EIterator *iter;
113 + CamelURL *url;
114
115 g_return_val_if_fail (transport_url != NULL, NULL);
116
117 + url = camel_url_new (transport_url, NULL);
118 + g_return_val_if_fail (url != NULL, NULL);
119 +
120 iter = e_list_get_iterator ((EList *) config->accounts);
121 - while (e_iterator_is_valid (iter)) {
122 - CamelURL *url;
123 - gchar *string;
124 + while (account == NULL && e_iterator_is_valid (iter)) {
125 + CamelURL *account_url;
126
127 account = (EAccount *) e_iterator_get (iter);
128
129 e_iterator_next (iter);
130
131 - if (account->transport == NULL)
132 - continue;
133 -
134 - else if (account->transport->url == NULL)
135 - continue;
136 -
137 - else if (*account->transport->url == '\0')
138 - continue;
139 + if ( !account || (account->transport == NULL) ||
140 + (account->transport->url == NULL) || (*account->transport->url == '\0')) {
141 + account = NULL;
142 + continue;
143 + }
144
145 - url = camel_url_new (account->transport->url, NULL);
146 - if (url == NULL)
147 + account_url = camel_url_new (account->transport->url, NULL);
148 + if (account_url == NULL) {
149 + account = NULL;
150 continue;
151 + }
152
153 - /* Simplify the account URL for comparison. */
154 - string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
155 - if (string == NULL || strcmp (string, transport_url) != 0)
156 + if (!mail_config_account_url_equal (url, account_url))
157 account = NULL; /* not a match */
158
159 - camel_url_free (url);
160 - g_free (string);
161 -
162 - if (account != NULL) {
163 - g_object_unref (iter);
164 - return account;
165 - }
166 + camel_url_free (account_url);
167 }
168
169 g_object_unref (iter);
170 + camel_url_free (url);
171
172 - return NULL;
173 + return account;
174 }
175
176 int