aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-giop.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2007-10-27 15:38:22 +0000
committerAnders Broman <anders.broman@ericsson.com>2007-10-27 15:38:22 +0000
commita07530ab2beb4ddfef6af4d4f7a04ea3dfd05772 (patch)
treed9621c8ae911257b53b4def0278517c32ec4b85c /epan/dissectors/packet-giop.c
parent135ba5aeff64ab5be45f417761fee114e9a498ae (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
Diffstat (limited to 'epan/dissectors/packet-giop.c')
-rw-r--r--epan/dissectors/packet-giop.c33
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: