aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2014-10-21 00:51:17 -0700
committerGuy Harris <guy@alum.mit.edu>2014-10-21 07:52:13 +0000
commitc4dc9eda8013ae0af0fe41fddc63d09eb7197bd7 (patch)
treef39ed81d2b58e16f98e141fdc8c1e852b6392aa9 /epan/dissectors/packet-dcerpc.c
parent7522497b67ca259e08c9d2c990437c0c0afb9955 (diff)
Handle an hfindex of -1.
Code generated by the current version of Pidl dissects bitset fields twice - once with proto_tree_add_item(), which puts the actual item into the tree, so that we can create a subtree under it, and once with a dissect_dcerpc_{type}() routine, to fetch the value and step past the field. The second call passes an hf_ index value of -1; interpret that as meaning "don't put this into the protocol tree", rather than just blindly calling proto_tree_add_XXX with -1 and getting a dissector assertion. Change-Id: I42fc023e77514a8a8a25d5c9db11fa3ef053babf Reviewed-on: https://code.wireshark.org/review/4892 Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'epan/dissectors/packet-dcerpc.c')
-rw-r--r--epan/dissectors/packet-dcerpc.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c
index 941725cb49..4fa97b8583 100644
--- a/epan/dissectors/packet-dcerpc.c
+++ b/epan/dissectors/packet-dcerpc.c
@@ -1480,7 +1480,7 @@ dissect_dcerpc_uint8(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
guint8 data;
data = tvb_get_guint8(tvb, offset);
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_item(tree, hfindex, tvb, offset, 1, DREP_ENC_INTEGER(drep));
}
if (pdata)
@@ -1499,7 +1499,7 @@ dissect_dcerpc_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
? tvb_get_letohs(tvb, offset)
: tvb_get_ntohs(tvb, offset));
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_item(tree, hfindex, tvb, offset, 2, DREP_ENC_INTEGER(drep));
}
if (pdata)
@@ -1518,7 +1518,7 @@ dissect_dcerpc_uint32(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
? tvb_get_letohl(tvb, offset)
: tvb_get_ntohl(tvb, offset));
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_item(tree, hfindex, tvb, offset, 4, DREP_ENC_INTEGER(drep));
}
if (pdata)
@@ -1541,7 +1541,7 @@ dissect_dcerpc_time_t(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
tv.secs = data;
tv.nsecs = 0;
- if (tree) {
+ if (tree && hfindex != -1) {
if (data == 0xffffffff) {
/* special case, no time specified */
proto_tree_add_time_format_value(tree, hfindex, tvb, offset, 4, &tv, "No time specified");
@@ -1566,7 +1566,7 @@ dissect_dcerpc_uint64(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
? tvb_get_letoh64(tvb, offset)
: tvb_get_ntoh64(tvb, offset));
- if (tree) {
+ if (tree && hfindex != -1) {
header_field_info *hfinfo;
/* This might be a field that is either 32bit, in NDR or
@@ -1608,7 +1608,7 @@ dissect_dcerpc_float(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
data = ((drep[0] & DREP_LITTLE_ENDIAN)
? tvb_get_letohieee_float(tvb, offset)
: tvb_get_ntohieee_float(tvb, offset));
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_float(tree, hfindex, tvb, offset, 4, data);
}
break;
@@ -1619,7 +1619,7 @@ dissect_dcerpc_float(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
/* ToBeDone: non IEEE floating formats */
/* Set data to a negative infinity value */
data = -G_MAXFLOAT;
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_debug_text(tree, "DCE RPC: dissection of non IEEE floating formats currently not implemented (drep=%u)!", drep[1]);
}
}
@@ -1642,7 +1642,7 @@ dissect_dcerpc_double(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
data = ((drep[0] & DREP_LITTLE_ENDIAN)
? tvb_get_letohieee_double(tvb, offset)
: tvb_get_ntohieee_double(tvb, offset));
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_double(tree, hfindex, tvb, offset, 8, data);
}
break;
@@ -1653,7 +1653,7 @@ dissect_dcerpc_double(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
/* ToBeDone: non IEEE double formats */
/* Set data to a negative infinity value */
data = -G_MAXDOUBLE;
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_debug_text(tree, "DCE RPC: dissection of non IEEE double formats currently not implemented (drep=%u)!", drep[1]);
}
}
@@ -1676,7 +1676,7 @@ dissect_dcerpc_uuid_t(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
} else {
tvb_get_ntohguid(tvb, offset, (e_guid_t *) &uuid);
}
- if (tree) {
+ if (tree && hfindex != -1) {
proto_tree_add_guid(tree, hfindex, tvb, offset, 16, (e_guid_t *) &uuid);
}
if (pdata) {