Wed, 20 Mar 2013 20:54:33 +0100
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);