aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rpc.c
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2006-08-25 08:10:35 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2006-08-25 08:10:35 +0000
commitcea0ae42e4af9a49b152082eb92481ab9e79f596 (patch)
tree426c03daa53f14ae1649d2e91903c320ac3e1db0 /epan/dissectors/packet-rpc.c
parent72699c63f9040a3243595eff1bd1082ed0839cf8 (diff)
If the length of a GSS token is zero, it's a null token, and the opaque
data shouldn't be dissected. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@19027 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-rpc.c')
-rw-r--r--epan/dissectors/packet-rpc.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/epan/dissectors/packet-rpc.c b/epan/dissectors/packet-rpc.c
index 04235938c9..e8bf6a780d 100644
--- a/epan/dissectors/packet-rpc.c
+++ b/epan/dissectors/packet-rpc.c
@@ -1036,19 +1036,21 @@ dissect_rpc_authgss_token(tvbuff_t* tvb, proto_tree* tree, int offset,
tvb, offset+0, 4, opaque_length);
}
offset += 4;
- length = tvb_length_remaining(tvb, offset);
- reported_length = tvb_reported_length_remaining(tvb, offset);
- DISSECTOR_ASSERT(length >= 0);
- DISSECTOR_ASSERT(reported_length >= 0);
- if (length > reported_length)
- length = reported_length;
- if ((guint32)length > opaque_length)
- length = opaque_length;
- if ((guint32)reported_length > opaque_length)
- reported_length = opaque_length;
- new_tvb = tvb_new_subset(tvb, offset, length, reported_length);
- len_consumed = call_dissector(gssapi_handle, new_tvb, pinfo, gtree);
- offset += len_consumed;
+ if (opaque_length != 0) {
+ length = tvb_length_remaining(tvb, offset);
+ reported_length = tvb_reported_length_remaining(tvb, offset);
+ DISSECTOR_ASSERT(length >= 0);
+ DISSECTOR_ASSERT(reported_length >= 0);
+ if (length > reported_length)
+ length = reported_length;
+ if ((guint32)length > opaque_length)
+ length = opaque_length;
+ if ((guint32)reported_length > opaque_length)
+ reported_length = opaque_length;
+ new_tvb = tvb_new_subset(tvb, offset, length, reported_length);
+ len_consumed = call_dissector(gssapi_handle, new_tvb, pinfo, gtree);
+ offset += len_consumed;
+ }
offset = rpc_roundup(offset);
return offset;
}