/pidgin/main: 738096bade99: gtkblist: Avoid calling the 'select ...
dx
dx at dxzone.com.ar
Sat May 14 22:49:15 EDT 2016
Changeset: 738096bade995d4c38940b5bca9404003948911d
Author: dx <dx at dxzone.com.ar>
Date: 2016-05-14 17:55 -0300
Branch: release-2.x.y
URL: https://hg.pidgin.im/pidgin/main/rev/738096bade99
Description:
gtkblist: Avoid calling the 'select notebook page' timeout after destroy
This showed up as a use-after-free in valgrind, when quitting
diffstat:
ChangeLog | 1 +
pidgin/gtkblist.c | 12 +++++++++++-
2 files changed, 12 insertions(+), 1 deletions(-)
diffs (54 lines):
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@ version 2.10.13 (MM/DD/YY):
* Fixed #14962
* Fixed alignment of incoming right-to-left messages in protocols that
don't support rich text
+ * Fix a potential crash while exiting pidgin
Windows-Specific Changes:
* Use getaddrinfo for DNS to enable IPv6 (#1075)
diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c
--- a/pidgin/gtkblist.c
+++ b/pidgin/gtkblist.c
@@ -119,6 +119,8 @@ typedef struct
PidginMiniDialog *signed_on_elsewhere;
PidginBlistTheme *current_theme;
+
+ guint select_page_timeout; /**< The timeout for pidgin_blist_select_notebook_page_cb */
} PidginBuddyListPrivate;
#define PIDGIN_BUDDY_LIST_GET_PRIVATE(list) \
@@ -4875,6 +4877,8 @@ static gboolean pidgin_blist_select_note
priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist);
+ priv->select_page_timeout = 0;
+
/* this is far too ugly thanks to me not wanting to fix #3989 properly right now */
if (priv->error_scrollbook != NULL) {
errors = gtk_notebook_get_n_pages(GTK_NOTEBOOK(priv->error_scrollbook->notebook));
@@ -4890,7 +4894,11 @@ static gboolean pidgin_blist_select_note
static void pidgin_blist_select_notebook_page(PidginBuddyList *gtkblist)
{
- purple_timeout_add(0, pidgin_blist_select_notebook_page_cb, gtkblist);
+ PidginBuddyListPrivate *priv;
+
+ priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist);
+
+ priv->select_page_timeout = purple_timeout_add(0, pidgin_blist_select_notebook_page_cb, gtkblist);
}
static void account_modified(PurpleAccount *account, PidginBuddyList *gtkblist)
@@ -6902,6 +6910,8 @@ static void pidgin_blist_destroy(PurpleB
priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist);
if (priv->current_theme)
g_object_unref(priv->current_theme);
+ if (priv->select_page_timeout)
+ purple_timeout_remove(priv->select_page_timeout);
g_free(priv);
g_free(gtkblist);
More information about the Commits
mailing list