[evolution/gnome-2-28] Bug #601787 - Double free in destroy_oof_data
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/gnome-2-28] Bug #601787 - Double free in destroy_oof_data
- Date: Mon, 22 Feb 2010 19:49:00 +0000 (UTC)
commit 933a36c6176dd77c72983243796e459fea0ecc30
Author: Milan Crha <mcrha redhat com>
Date: Mon Feb 22 20:48:12 2010 +0100
Bug #601787 - Double free in destroy_oof_data
.../exchange-operations/exchange-account-setup.c | 24 ++++++++++---------
.../exchange-folder-permission.c | 3 ++
plugins/exchange-operations/exchange-folder.c | 10 ++++++-
3 files changed, 24 insertions(+), 13 deletions(-)
---
diff --git a/plugins/exchange-operations/exchange-account-setup.c b/plugins/exchange-operations/exchange-account-setup.c
index 296e442..3bf31df 100644
--- a/plugins/exchange-operations/exchange-account-setup.c
+++ b/plugins/exchange-operations/exchange-account-setup.c
@@ -55,7 +55,7 @@ GtkWidget* org_gnome_exchange_settings(EPlugin *epl, EConfigHookItemFactoryData
GtkWidget *org_gnome_exchange_owa_url(EPlugin *epl, EConfigHookItemFactoryData *data);
gboolean org_gnome_exchange_check_options(EPlugin *epl, EConfigHookPageCheckData *data);
GtkWidget *org_gnome_exchange_auth_section (EPlugin *epl, EConfigHookItemFactoryData *data);
-void org_gnome_exchange_commit (EPlugin *epl, EConfigHookItemFactoryData *data);
+void org_gnome_exchange_commit (EPlugin *epl, EMConfigTargetAccount *target_account);
GtkWidget* org_gnome_exchange_show_folder_size_factory (EPlugin *epl, EConfigHookItemFactoryData *data);
CamelServiceAuthType camel_exchange_ntlm_authtype = {
@@ -86,7 +86,7 @@ typedef struct {
GtkWidget *text_view;
}OOFData;
-static OOFData *oof_data;
+static OOFData *oof_data = NULL;
static void
update_state (GtkTextBuffer *buffer, gpointer data)
@@ -309,6 +309,7 @@ org_gnome_exchange_settings(EPlugin *epl, EConfigHookItemFactoryData *data)
gtk_text_buffer_get_bounds (buffer, &start, &end);
oof_message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
if (oof_message && *oof_message) {
+ g_free (oof_data->message);
/* Will this ever happen? */
oof_data->message = oof_message;
}
@@ -850,6 +851,8 @@ set_oof_info (void)
{
ExchangeAccount *account;
+ g_return_if_fail (oof_data != NULL);
+
account = exchange_operations_get_exchange_account ();
if (account && !exchange_oof_set (account, oof_data->state, oof_data->message)) {
@@ -861,21 +864,24 @@ set_oof_info (void)
static void
destroy_oof_data (void)
{
- if (oof_data->message)
+ if (oof_data && oof_data->message) {
g_free (oof_data->message);
- if (oof_data)
+ oof_data->message = NULL;
+ }
+
+ if (oof_data) {
g_free (oof_data);
+ oof_data = NULL;
+ }
}
void
-org_gnome_exchange_commit (EPlugin *epl, EConfigHookItemFactoryData *data)
+org_gnome_exchange_commit (EPlugin *epl, EMConfigTargetAccount *target_account)
{
- EMConfigTargetAccount *target_account;
const gchar *source_url;
CamelURL *url;
gint offline_status;
- target_account = (EMConfigTargetAccount *)data->config->target;
source_url = e_account_get_string (target_account->account, E_ACCOUNT_SOURCE_URL);
if (source_url && source_url[0] != '\0')
url = camel_url_new (source_url, NULL);
@@ -888,10 +894,6 @@ org_gnome_exchange_commit (EPlugin *epl, EConfigHookItemFactoryData *data)
return;
}
- if (data->old) {
- camel_url_free(url);
- return;
- }
camel_url_free (url);
diff --git a/plugins/exchange-operations/exchange-folder-permission.c b/plugins/exchange-operations/exchange-folder-permission.c
index 7113ef8..5b7752f 100644
--- a/plugins/exchange-operations/exchange-folder-permission.c
+++ b/plugins/exchange-operations/exchange-folder-permission.c
@@ -170,6 +170,9 @@ org_gnome_exchange_folder_permissions (EPlugin *ep, EMPopupTargetFolder *target)
if (mode == OFFLINE_MODE)
return;
+ if (strlen (target->uri) <= strlen ("exchange://") + strlen (account->account_filename))
+ return;
+
path = target->uri + strlen ("exchange://") + strlen (account->account_filename);
if (!path || !*path)
diff --git a/plugins/exchange-operations/exchange-folder.c b/plugins/exchange-operations/exchange-folder.c
index 7c9f1bf..05d47c9 100644
--- a/plugins/exchange-operations/exchange-folder.c
+++ b/plugins/exchange-operations/exchange-folder.c
@@ -215,13 +215,19 @@ org_gnome_exchange_check_inbox_subscribed (EPlugin *ep, EMPopupTargetFolder *tar
if (!account)
return;
+ if (strlen (target->uri) <= strlen ("exchange://") + strlen (account->account_filename))
+ return;
+
path = g_strdup (target->uri + strlen ("exchange://") + strlen (account->account_filename));
sub_folder = strchr (path, '@');
+ if (!sub_folder || !g_strrstr(sub_folder, "/")) {
+ g_free (path);
+ return;
+ }
+
g_free (path);
- if (!sub_folder || !g_strrstr(sub_folder, "/"))
- return;
for (i = 0; i < sizeof (popup_inbox_items) / sizeof (popup_inbox_items[0]); i++)
menus = g_slist_prepend (menus, &popup_inbox_items[i]);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]