diff options
author | Ulf Lamping <ulf.lamping@web.de> | 2005-09-12 00:29:19 +0000 |
---|---|---|
committer | Ulf Lamping <ulf.lamping@web.de> | 2005-09-12 00:29:19 +0000 |
commit | f9b16868836047da2a15384419d576f08eea8e29 (patch) | |
tree | 9e93164615538cb62f9ba8f3061e65a9950c50cc | |
parent | 55c3e85a95f7c2d6d695f0e1244c307006ab31e6 (diff) |
fix fault defragmentation the same way as in the request/response path
Unfortunately, I don't have a capture file to test this...
svn path=/trunk/; revision=15763
-rw-r--r-- | epan/dissectors/packet-dcerpc.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c index 846e721381..a6ce749604 100644 --- a/epan/dissectors/packet-dcerpc.c +++ b/epan/dissectors/packet-dcerpc.c @@ -3731,13 +3731,10 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, } if(hdr->flags&PFC_FIRST_FRAG){ /* FIRST fragment */ if( (!pinfo->fd->flags.visited) && value->rep_frame ){ - fragment_add(tvb, offset, pinfo, value->rep_frame, - dcerpc_co_reassemble_table, - 0, + fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, stub_length, TRUE); - fragment_set_tot_len(pinfo, value->rep_frame, - dcerpc_co_reassemble_table, alloc_hint); } if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, @@ -3746,14 +3743,10 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, } else if(hdr->flags&PFC_LAST_FRAG){ /* LAST fragment */ if( value->rep_frame ){ fragment_data *fd_head; - guint32 tot_len; - tot_len = fragment_get_tot_len(pinfo, value->rep_frame, - dcerpc_co_reassemble_table); - fd_head = fragment_add(tvb, offset, pinfo, + fd_head = fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, - dcerpc_co_reassemble_table, - tot_len-alloc_hint, + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, stub_length, TRUE); @@ -3762,7 +3755,7 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, tvbuff_t *next_tvb; proto_item *frag_tree_item; - next_tvb = tvb_new_real_data(fd_head->data, fd_head->datalen, fd_head->datalen); + next_tvb = tvb_new_real_data(fd_head->data, fd_head->len, fd_head->len); tvb_set_child_real_data_tvbuff(tvb, next_tvb); add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); show_fragment_tree(fd_head, &dcerpc_frag_items, @@ -3798,12 +3791,8 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, } } else { /* MIDDLE fragment(s) */ if( (!pinfo->fd->flags.visited) && value->rep_frame ){ - guint32 tot_len; - tot_len = fragment_get_tot_len(pinfo, value->rep_frame, - dcerpc_co_reassemble_table); - fragment_add(tvb, offset, pinfo, value->rep_frame, - dcerpc_co_reassemble_table, - tot_len-alloc_hint, + fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, stub_length, TRUE); } |