Wireshark-dev: [Wireshark-dev] Crash in gtk/conversations_table.c

From: Gisle Vanem <gvanem@xxxxxxxxxxxx>
Date: Wed, 17 Aug 2011 23:17:22 +0200
While clicking inside the "Statistics | Conversations" window (blank window btw)
and pressing the "Follow stream" button, I got a crash. From WinDbg (my JIT debugger):

wireshark!follow_stream_cb(struct _GtkWidget * follow_stream_bt = 0x63a57e95, void * data = 0x046533f0)+0x1c
WARNING: Stack unwind information not available. Following frames may be wrong.
libgobject_2_0_0!g_closure_invoke+0x115
libgobject_2_0_0!g_signal_has_handler_pending+0xf45
libgobject_2_0_0!g_signal_emit_valist+0x7b1
libgobject_2_0_0!g_signal_emit+0x26
libgtk_win32_2_0_0!gtk_button_clicked+0x40
..

The offender:

follow_stream_cb(GtkWidget *follow_stream_bt, gpointer data _U_)
{
   conversations_table *ct = g_object_get_data (G_OBJECT(follow_stream_bt), CONV_PTR_KEY);
   GtkTreeIter iter;
   GtkTreeModel *model;
   GtkTreeSelection  *sel;
   guint32 idx = 0;
   gchar *filter;
   conv_t *conv;

   sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(ct->table));

It crashed because 'ct' is NULL. Why, I don't know, but maybe we should
bail out if 'ct' is NULL:

--- SVN-Latest\gtk\conversations_table.c        Thu Jul 21 20:52:02 2011
+++ gtk\conversations_table.c   Wed Aug 17 23:15:56 2011
@@ -2473,6 +2473,9 @@
    gchar *filter;
    conv_t *conv;

+    if (!ct)
+       return;
+
    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(ct->table));
    if (!gtk_tree_selection_get_selected(sel, &model, &iter)) {
        simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "No conversation selected");

---------------

All this was while watching AirPcap traffic ... i.e. no streams.

--gv