diff options
author | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2003-11-10 07:44:47 +0000 |
---|---|---|
committer | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2003-11-10 07:44:47 +0000 |
commit | 6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb (patch) | |
tree | 9a4c7b43125bc3fef5496b17af623f22f00bf843 | |
parent | 3937e6b70e7fc34c6b831013816ce73c2400c6fe (diff) | |
download | wireshark-6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb.tar.gz wireshark-6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb.tar.bz2 wireshark-6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb.zip |
Not all LDAP PDUs are aligned to the start of a TCP segment.
If we failed to dissect the GSS-SPNEGO blob it probably means that the segment
is somewhere in the middle of an LDAP PDU.
Just bail out and stop dissecting the PDU instead of aborting ethereal completely
using g_assert() since this is not really a pathological error, its just something that can and will happen normally.
svn path=/trunk/; revision=8925
-rw-r--r-- | gtk/dcerpc_stat.c | 43 | ||||
-rw-r--r-- | packet-ldap.c | 10 |
2 files changed, 49 insertions, 4 deletions
diff --git a/gtk/dcerpc_stat.c b/gtk/dcerpc_stat.c index 6b6812c0df..be0a6bc12a 100644 --- a/gtk/dcerpc_stat.c +++ b/gtk/dcerpc_stat.c @@ -1,7 +1,7 @@ /* dcerpc_stat.c * dcerpc_stat 2002 Ronnie Sahlberg * - * $Id: dcerpc_stat.c,v 1.27 2003/10/27 01:35:53 sharpe Exp $ + * $Id: dcerpc_stat.c,v 1.28 2003/11/10 07:44:47 sahlberg Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -388,16 +388,51 @@ dcerpcstat_program_select(GtkWidget *item _U_, gpointer key) } +static GtkWidget *program_submenu_menu; +static GtkWidget *program_submenu_item; +static GtkWidget *program_submenu_label; +static int program_subitem_index; +static char *first_menu_name; static void dcerpcstat_add_program_to_menu(dcerpc_uuid_key *k, dcerpc_uuid_value *v) { GtkWidget *program_menu_item; + GtkWidget *box; + char str[64]; + + switch(program_subitem_index%15){ + case 0: + + first_menu_name=v->name; + snprintf(str,63,"%s ...",v->name); + program_submenu_item=gtk_menu_item_new(); + box=gtk_hbox_new(TRUE,0); + gtk_container_add(GTK_CONTAINER(program_submenu_item), box); + + program_submenu_label=gtk_label_new(str); + gtk_box_pack_start(GTK_BOX(box), program_submenu_label, TRUE, TRUE, 0); + gtk_widget_show(program_submenu_label); + gtk_widget_show(box); + + gtk_menu_append(GTK_MENU(prog_menu), program_submenu_item); + gtk_widget_show(program_submenu_item); + + program_submenu_menu=gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(program_submenu_item), program_submenu_menu); + break; + case 14: + snprintf(str,63,"%s - %s",first_menu_name,v->name); + gtk_label_set_text(GTK_LABEL(program_submenu_label), str); + break; +/*qqq*/ + } + program_subitem_index++; program_menu_item=gtk_menu_item_new_with_label(v->name); SIGNAL_CONNECT(program_menu_item, "activate", dcerpcstat_program_select, k); gtk_widget_show(program_menu_item); - gtk_menu_append(GTK_MENU(prog_menu), program_menu_item); + gtk_menu_append(GTK_MENU(program_submenu_menu), program_menu_item); if(!dcerpc_uuid_program){ dcerpc_uuid_program=&k->uuid; @@ -513,6 +548,10 @@ gtk_dcerpcstat_cb(GtkWidget *w _U_, gpointer d _U_) prog_menu=gtk_menu_new(); current_uuid_key=NULL; current_uuid_value=NULL; +/*qqq*/ + program_submenu_item=NULL; + program_submenu_menu=NULL; + program_subitem_index=0; do { new_uuid_key=NULL; new_uuid_value=NULL; diff --git a/packet-ldap.c b/packet-ldap.c index f72e08eb29..d466bbb0dd 100644 --- a/packet-ldap.c +++ b/packet-ldap.c @@ -3,7 +3,7 @@ * * See RFC 1777 (LDAP v2), RFC 2251 (LDAP v3), and RFC 2222 (SASL). * - * $Id: packet-ldap.c,v 1.68 2003/11/07 04:03:44 sahlberg Exp $ + * $Id: packet-ldap.c,v 1.69 2003/11/10 07:44:46 sahlberg Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -2044,7 +2044,13 @@ dissect_ldap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) gtree = proto_item_add_subtree(gitem, ett_ldap_gssapi_token); } len = call_dissector(gssapi_wrap_handle, next_tvb, pinfo, gtree); - g_assert(len != 0); /* GSS_Wrap() dissectors can't reject data */ + /* + * if len is 0 it probably mean that we got a PDU that is not + * aligned to the start of the segment. + */ + if(len==0){ + return; + } if (gitem != NULL) proto_item_set_len(gitem, len); |