Ethereal CVS as of about 24 hrs ago compiled to use gtk2
Slackware 8.1 patched to 2.4.21
gtk+ 2.3.0
If I select a TCP packet and right click "follow stream" all is OK.
If instead I select analyse->follow stream I get a crash in follow_stream_cb
It appears
 	filter_te = OBJECT_GET_DATA(w, E_DFILTER_TE_KEY);
is returning NULL.
This NULL pointer gets used all over the following code (especially to 
find previous_filter) until
	if(strlen(previous_filter)) {
tries to use to it.
If I test for each of these being NULL and bypass the code (see attached 
diff) it runs and filters as requested but doesn't fill in the filter 
box at the bottom of the window.
--
There's no point in being grown up if you can't be childish sometimes.
                -- Dr. Who
--- follow_dlg.c	2003-12-07 15:10:00.000000000 +1100
+++ follow_dlg.c-tmp	2003-12-07 16:56:14.000000000 +1100
@@ -155,7 +155,7 @@
 	GtkWidget	*stream_om, *stream_menu, *stream_mi;
 	int		tmp_fd;
 	gchar		*follow_filter;
-	const gchar	*previous_filter;
+	const gchar	*previous_filter=NULL;
 	const char	*hostname0, *hostname1;
 	char		*port0, *port1;
 	char		string[128];
@@ -214,22 +214,31 @@
 	follow_info->filter_te = filter_te;
 
 	/* save previous filter, const since we're not supposed to alter */
-	previous_filter =
-	    (const gchar *)gtk_entry_get_text(GTK_ENTRY(filter_te));
+	if (filter_te) {
+	    previous_filter =
+		(const gchar *)gtk_entry_get_text(GTK_ENTRY(filter_te));
+	}
 
 	/* allocate our new filter. API claims g_malloc terminates program on failure */
 	/* my calc for max alloc needed is really +10 but when did a few extra bytes hurt ? */
-	follow_info->filter_out_filter =
-	    (gchar *)g_malloc(strlen(follow_filter) + strlen(previous_filter) + 16);
+	if (previous_filter) {
+	    follow_info->filter_out_filter =
+		(gchar *)g_malloc(strlen(follow_filter) + strlen(previous_filter) + 16);
+	} else {
+	    follow_info->filter_out_filter =
+		(gchar *)g_malloc(strlen(follow_filter) + 16);
+	}
 
 	/* append the negation */
-	if(strlen(previous_filter)) {
+	if(previous_filter && strlen(previous_filter)) {
 	    sprintf(follow_info->filter_out_filter, "%s \nand !(%s)", previous_filter, follow_filter);
 	} else {
 	    sprintf(follow_info->filter_out_filter, "!(%s)", follow_filter);
 	}
 
-	gtk_entry_set_text(GTK_ENTRY(filter_te), follow_filter);
+	if (filter_te) {
+	    gtk_entry_set_text(GTK_ENTRY(filter_te), follow_filter);
+	}
 
 	/* Run the display filter so it goes in effect. */
 	filter_packets(&cfile, follow_filter);