Ethereal-dev: Re: [Ethereal-dev] bug in TNS dissector
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <guy@xxxxxxxxxx>
Date: Thu, 17 Jan 2002 12:57:45 -0800 (PST)
> I think I have found a bug in ethereal TNS dissector. When I try to load > attached packet then ethereal crashes. I've checked in a fix, which also cleans up a number of calls in the dissector (including a bug I'd introduced in tvbuffifying the dissector a while ago). I've attached the patch for it. However, the packet doesn't seem to be a valid packet, at least according to the dissector; starting at the "Header Checksum" field, the packet appears to have text strings, and if you take the byte *before* the "OS Other system trap CPU time" string as a byte count, it's the length of that string. "OS Other system trap CPU time" *does*, from a Google search, appear to be the name of a statistic Oracle can report in what I presume is a database table the server can supply, so there might be another problem in the TNS dissector.
? errs ? .pure ? Makefile.gprof ? WORK ? gtkdialogbox.c ? gtkdialogbox.h ? errs.DU ? errs.hpux ? capture.c.WARNING ? simple_dialog.h.WARNING ? packet-ipx.c.NEW ? gtk/simple_dialog.c.WARNING ? wiretap/SAVE ? wiretap/filter-fddi ? wiretap/Makefile.gprof ? wiretap/.pure ? wiretap/iptrace.c.HACK Index: packet-tns.c =================================================================== RCS file: /usr/local/cvsroot/ethereal/packet-tns.c,v retrieving revision 1.24 diff -c -r1.24 packet-tns.c *** packet-tns.c 2001/12/10 00:25:40 1.24 --- packet-tns.c 2002/01/17 20:47:17 *************** *** 195,212 **** { proto_tree *df_tree = NULL; ! ti = proto_tree_add_uint(data_tree, hf_tns_data_flag, tvb, offset, 2, FALSE); df_tree = proto_item_add_subtree(ti, ett_tns_data_flag); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_send, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_rc, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_c, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_reserved, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_more, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_eof, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_dic, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_rts, tvb, offset, 2, FALSE); ! proto_tree_add_uint(df_tree, hf_tns_data_flag_sntt, tvb, offset, 2, FALSE); } offset += 2; --- 195,212 ---- { proto_tree *df_tree = NULL; ! ti = proto_tree_add_item(data_tree, hf_tns_data_flag, tvb, offset, 2, FALSE); df_tree = proto_item_add_subtree(ti, ett_tns_data_flag); ! proto_tree_add_item(df_tree, hf_tns_data_flag_send, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_rc, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_c, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_reserved, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_more, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_eof, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_dic, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_rts, tvb, offset, 2, FALSE); ! proto_tree_add_item(df_tree, hf_tns_data_flag_sntt, tvb, offset, 2, FALSE); } offset += 2; *************** *** 270,312 **** if ( connect_tree ) { /* need to break down w/ bitfield */ ! proto_tree_add_uint(connect_tree, hf_tns_service_options, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_sdu_size, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_max_tdu_size, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_nt_proto_characteristics, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_line_turnaround, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_bytes(connect_tree, hf_tns_value_of_one, tvb, ! offset, 2, tvb_get_ptr(tvb, offset, 2)); } offset += 2; --- 270,312 ---- if ( connect_tree ) { /* need to break down w/ bitfield */ ! proto_tree_add_item(connect_tree, hf_tns_service_options, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_sdu_size, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_max_tdu_size, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_nt_proto_characteristics, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_line_turnaround, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_value_of_one, tvb, ! offset, 2, FALSE); } offset += 2; *************** *** 328,379 **** if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_connect_data_max, tvb, ! offset, 4, tvb_get_ntohl(tvb, offset)); } offset += 4; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_connect_flags0, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_connect_flags1, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_trace_cf1, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_trace_cf2, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree ) { ! proto_tree_add_uint(connect_tree, hf_tns_trace_cid, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( connect_tree && cd_len > 0) { ! proto_tree_add_string(connect_tree, hf_tns_connect_data, tvb, ! tns_offset+cd_offset, tvb_length(tvb)-(tns_offset+cd_offset), ! tvb_get_ptr(tvb, tns_offset+cd_offset, ! tvb_length(tvb)-(tns_offset+cd_offset))); } return; } --- 328,378 ---- if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_connect_data_max, tvb, ! offset, 4, FALSE); } offset += 4; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_connect_flags0, tvb, ! offset, 1, FALSE); } offset += 1; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_connect_flags1, tvb, ! offset, 1, FALSE); } offset += 1; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_trace_cf1, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_trace_cf2, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree ) { ! proto_tree_add_item(connect_tree, hf_tns_trace_cid, tvb, ! offset, 2, FALSE); } offset += 2; if ( connect_tree && cd_len > 0) { ! proto_tree_add_item(connect_tree, hf_tns_connect_data, tvb, ! tns_offset+cd_offset, ! tvb_length(tvb)-(tns_offset+cd_offset), FALSE); } return; } *************** *** 410,438 **** if ( accept_tree ) { ! proto_tree_add_uint(accept_tree, hf_tns_service_options, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( accept_tree ) { ! proto_tree_add_uint(accept_tree, hf_tns_sdu_size, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( accept_tree ) { ! proto_tree_add_uint(accept_tree, hf_tns_max_tdu_size, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( accept_tree ) { ! proto_tree_add_bytes(accept_tree, hf_tns_value_of_one, tvb, ! offset, 2, tvb_get_ptr(tvb, offset, 2)); } offset += 2; --- 409,437 ---- if ( accept_tree ) { ! proto_tree_add_item(accept_tree, hf_tns_service_options, tvb, ! offset, 2, FALSE); } offset += 2; if ( accept_tree ) { ! proto_tree_add_item(accept_tree, hf_tns_sdu_size, tvb, ! offset, 2, FALSE); } offset += 2; if ( accept_tree ) { ! proto_tree_add_item(accept_tree, hf_tns_max_tdu_size, tvb, ! offset, 2, FALSE); } offset += 2; if ( accept_tree ) { ! proto_tree_add_item(accept_tree, hf_tns_value_of_one, tvb, ! offset, 2, FALSE); } offset += 2; *************** *** 454,477 **** if ( accept_tree ) { ! proto_tree_add_uint(accept_tree, hf_tns_connect_flags0, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( accept_tree ) { ! proto_tree_add_uint(accept_tree, hf_tns_connect_flags1, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( accept_tree && accept_len > 0) { ! proto_tree_add_string(accept_tree, hf_tns_accept_data, tvb, ! tns_offset+accept_offset, tvb_length(tvb)-(tns_offset+accept_offset), ! tvb_get_ptr(tvb, tns_offset+accept_offset, ! tvb_length(tvb)-(tns_offset+accept_offset))); } return; } --- 453,475 ---- if ( accept_tree ) { ! proto_tree_add_item(accept_tree, hf_tns_connect_flags0, tvb, ! offset, 1, FALSE); } offset += 1; if ( accept_tree ) { ! proto_tree_add_item(accept_tree, hf_tns_connect_flags1, tvb, ! offset, 1, FALSE); } offset += 1; if ( accept_tree && accept_len > 0) { ! proto_tree_add_item(accept_tree, hf_tns_accept_data, tvb, ! tns_offset+accept_offset, ! tvb_length(tvb)-(tns_offset+accept_offset), FALSE); } return; } *************** *** 499,528 **** if ( refuse_tree ) { ! proto_tree_add_uint(refuse_tree, hf_tns_refuse_reason_user, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( refuse_tree ) { ! proto_tree_add_uint(refuse_tree, hf_tns_refuse_reason_system, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( refuse_tree ) { ! proto_tree_add_uint(refuse_tree, hf_tns_refuse_data_length, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( refuse_tree ) { ! proto_tree_add_string(refuse_tree, hf_tns_refuse_data, tvb, ! offset, tvb_length(tvb)-offset, ! tvb_get_ptr(tvb, offset, tvb_length(tvb)-offset)); } return; } --- 497,525 ---- if ( refuse_tree ) { ! proto_tree_add_item(refuse_tree, hf_tns_refuse_reason_user, tvb, ! offset, 1, FALSE); } offset += 1; if ( refuse_tree ) { ! proto_tree_add_item(refuse_tree, hf_tns_refuse_reason_system, tvb, ! offset, 1, FALSE); } offset += 1; if ( refuse_tree ) { ! proto_tree_add_item(refuse_tree, hf_tns_refuse_data_length, tvb, ! offset, 2, FALSE); } offset += 2; if ( refuse_tree ) { ! proto_tree_add_item(refuse_tree, hf_tns_refuse_data, tvb, ! offset, tvb_length(tvb)-offset, FALSE); } return; } *************** *** 550,572 **** if ( abort_tree ) { ! proto_tree_add_uint(abort_tree, hf_tns_abort_reason_user, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( abort_tree ) { ! proto_tree_add_uint(abort_tree, hf_tns_abort_reason_system, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( abort_tree ) { ! proto_tree_add_string(abort_tree, hf_tns_abort_data, tvb, ! offset, tvb_length_remaining(tvb,offset), ! tvb_get_ptr(tvb, offset, tvb_length_remaining(tvb,offset))); } return; } --- 547,568 ---- if ( abort_tree ) { ! proto_tree_add_item(abort_tree, hf_tns_abort_reason_user, tvb, ! offset, 1, FALSE); } offset += 1; if ( abort_tree ) { ! proto_tree_add_item(abort_tree, hf_tns_abort_reason_system, tvb, ! offset, 1, FALSE); } offset += 1; if ( abort_tree ) { ! proto_tree_add_item(abort_tree, hf_tns_abort_data, tvb, ! offset, tvb_length_remaining(tvb,offset), FALSE); } return; } *************** *** 609,630 **** if ( marker_tree ) { ! proto_tree_add_uint(marker_tree, hf_tns_marker_type, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( marker_tree ) { ! proto_tree_add_uint(marker_tree, hf_tns_marker_data_byte, tvb, ! offset, 1, tvb_get_guint8(tvb, offset)); } offset += 1; if ( marker_tree ) { ! proto_tree_add_uint(marker_tree, hf_tns_marker_data_byte, tvb, ! offset, 1, tvb_get_ntohs(tvb, offset)); } offset += 1; --- 605,626 ---- if ( marker_tree ) { ! proto_tree_add_item(marker_tree, hf_tns_marker_type, tvb, ! offset, 1, FALSE); } offset += 1; if ( marker_tree ) { ! proto_tree_add_item(marker_tree, hf_tns_marker_data_byte, tvb, ! offset, 1, FALSE); } offset += 1; if ( marker_tree ) { ! proto_tree_add_item(marker_tree, hf_tns_marker_data_byte, tvb, ! offset, 1, FALSE); } offset += 1; *************** *** 653,668 **** if ( redirect_tree ) { ! proto_tree_add_uint(redirect_tree, hf_tns_redirect_data_length, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( redirect_tree ) { ! proto_tree_add_string(redirect_tree, hf_tns_redirect_data, tvb, ! offset, tvb_length(tvb)-offset, ! tvb_get_ptr(tvb, offset, tvb_length(tvb)-offset)); } return; } --- 649,663 ---- if ( redirect_tree ) { ! proto_tree_add_item(redirect_tree, hf_tns_redirect_data_length, tvb, ! offset, 2, FALSE); } offset += 2; if ( redirect_tree ) { ! proto_tree_add_item(redirect_tree, hf_tns_redirect_data, tvb, ! offset, tvb_length(tvb)-offset, FALSE); } return; } *************** *** 689,704 **** if ( control_tree ) { ! proto_tree_add_uint(control_tree, hf_tns_control_cmd, tvb, ! offset, 2, tvb_get_ntohs(tvb, offset)); } offset += 2; if ( control_tree ) { ! proto_tree_add_string(control_tree, hf_tns_control_data, tvb, ! offset, tvb_length(tvb)-offset, ! tvb_get_ptr(tvb, offset, tvb_length(tvb)-offset)); } return; } --- 684,698 ---- if ( control_tree ) { ! proto_tree_add_item(control_tree, hf_tns_control_cmd, tvb, ! offset, 2, FALSE); } offset += 2; if ( control_tree ) { ! proto_tree_add_item(control_tree, hf_tns_control_data, tvb, ! offset, tvb_length(tvb)-offset, FALSE); } return; }
- References:
- [Ethereal-dev] bug in TNS dissector
- From: Stekrt Michal
- [Ethereal-dev] bug in TNS dissector
- Prev by Date: [Ethereal-dev] bug in TNS dissector
- Next by Date: [Ethereal-dev] issues with tethereal and ring buffers...
- Previous by thread: [Ethereal-dev] bug in TNS dissector
- Next by thread: [Ethereal-dev] issues with tethereal and ring buffers...
- Index(es):