Fix use-after-free in gtkblist

Wed, 20 Mar 2013 20:54:33 +0100

author
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
date
Wed, 20 Mar 2013 20:54:33 +0100
changeset 33825
7f04b505b972
parent 33824
5d2f3ca02596
child 33826
77908f5d8996

Fix use-after-free in gtkblist

pidgin/gtkblist.c file | annotate | diff | comparison | revisions
--- a/pidgin/gtkblist.c	Wed Mar 20 20:47:32 2013 +0100
+++ b/pidgin/gtkblist.c	Wed Mar 20 20:54:33 2013 +0100
@@ -123,6 +123,8 @@
 
 	PidginBlistTheme *current_theme;
 
+	guint select_notebook_page_timeout;
+
 #if !GTK_CHECK_VERSION(3,0,0)
 	GdkCursor *hand_cursor;         /**< Hand cursor */
 	GdkCursor *arrow_cursor;        /**< Arrow cursor */
@@ -5033,12 +5035,15 @@
 	} else
 		gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 0);
 
+	priv->select_notebook_page_timeout = 0;
 	return FALSE;
 }
 
 static void pidgin_blist_select_notebook_page(PidginBuddyList *gtkblist)
 {
-	purple_timeout_add(0, pidgin_blist_select_notebook_page_cb, gtkblist);
+	PidginBuddyListPrivate *priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist);
+	priv->select_notebook_page_timeout = purple_timeout_add(0,
+		pidgin_blist_select_notebook_page_cb, gtkblist);
 }
 
 static void account_modified(PurpleAccount *account, PidginBuddyList *gtkblist)
@@ -7132,6 +7137,8 @@
 
 	if (priv->current_theme)
 		g_object_unref(priv->current_theme);
+	if (priv->select_notebook_page_timeout)
+		purple_timeout_remove(priv->select_notebook_page_timeout);
 	g_free(priv);
 
 	g_free(gtkblist);

mercurial