diff options
author | Anders Broman <anders.broman@ericsson.com> | 2007-10-27 15:38:22 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2007-10-27 15:38:22 +0000 |
commit | a07530ab2beb4ddfef6af4d4f7a04ea3dfd05772 (patch) | |
tree | d9621c8ae911257b53b4def0278517c32ec4b85c | |
parent | 135ba5aeff64ab5be45f417761fee114e9a498ae (diff) |
From Steve Osselton:
The GIOP Fragment message type was added as of GIOP 1.1. However the Fragment
message header (containing a request id) was only added as of GIOP 1.2. The
GIOP Fragment dissector incorrectly attempts to process the request id for a
version 1.1 request.
To fix add a version check to the dissect_giop_fragment function in
packet-giop.c:
svn path=/trunk/; revision=23289
-rw-r--r-- | epan/dissectors/packet-giop.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/epan/dissectors/packet-giop.c b/epan/dissectors/packet-giop.c index 8b4859719e..584b2c2eb8 100644 --- a/epan/dissectors/packet-giop.c +++ b/epan/dissectors/packet-giop.c @@ -3770,34 +3770,37 @@ dissect_giop_locate_reply( tvbuff_t * tvb, packet_info * pinfo, static void dissect_giop_fragment( tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, - gboolean stream_is_big_endian) + MessageHeader * header, gboolean stream_is_big_endian) { guint32 offset = 0; - guint32 request_id; proto_tree *fragment_tree = NULL; proto_item *tf; if (tree) { tf = proto_tree_add_text (tree, tvb, offset, -1, - "General Inter-ORB Fragment"); + "General Inter-ORB Fragment"); if (fragment_tree == NULL) - { - fragment_tree = proto_item_add_subtree (tf, ett_giop_fragment); - - } + { + fragment_tree = proto_item_add_subtree (tf, ett_giop_fragment); + + } } - - request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian,GIOP_HEADER_SIZE); - if (check_col(pinfo->cinfo, COL_INFO)) + + if (header->GIOP_version.minor > 1) + { + guint32 request_id; + + request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian,GIOP_HEADER_SIZE); + if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, " %u", request_id); - } - if (fragment_tree ) - { + } + if (fragment_tree ) + { proto_tree_add_uint (fragment_tree, hf_giop_req_id, tvb, offset-4, 4,request_id); } - + } } @@ -3983,7 +3986,7 @@ static void dissect_giop_common (tvbuff_t * tvb, packet_info * pinfo, proto_tree stream_is_big_endian); break; case Fragment: - dissect_giop_fragment(payload_tvb, pinfo, tree, + dissect_giop_fragment(payload_tvb, pinfo, tree, &header, stream_is_big_endian); break; default: |