summaryrefslogtreecommitdiff
path: root/epan/dissectors/packet-epl.c
diff options
context:
space:
mode:
authorRoland Knall <roland.knall@br-automation.com>2015-08-05 09:36:20 +0200
committerPascal Quantin <pascal.quantin@gmail.com>2015-08-05 20:46:27 +0000
commit6aabad5b336b9933d3b764d2f84dd664de82f88f (patch)
treee12fcdd9ddbcbbb991bb71d2022cb23771d63cf1 /epan/dissectors/packet-epl.c
parent504f5b34787c4e02a7fdcf14e8fe346547a371d5 (diff)
downloadwireshark-6aabad5b336b9933d3b764d2f84dd664de82f88f.tar.gz
epl: Fix Payload sub-dissection
Current implementation gives all remaining data to sub-dissector. This is not correct, as with "Write Multiple by Index" the data given includes the following indeces and their datasets Change-Id: I5343bf61431a7b5507b51f53f0de8c6e3dc72cf1 Reviewed-on: https://code.wireshark.org/review/9870 Reviewed-by: Roland Knall <rknall@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-epl.c')
-rw-r--r--epan/dissectors/packet-epl.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/epan/dissectors/packet-epl.c b/epan/dissectors/packet-epl.c
index ff784e959d..de53ffded9 100644
--- a/epan/dissectors/packet-epl.c
+++ b/epan/dissectors/packet-epl.c
@@ -1889,7 +1889,7 @@ decode_epl_address (guchar adr)
static gint
dissect_epl_payload ( proto_tree *epl_tree, tvbuff_t *tvb, packet_info *pinfo, gint offset, gint len, guint8 msgType )
{
- gint off = 0, rem_len = 0;
+ gint off = 0, rem_len = 0, pld_rem_len = 0;
tvbuff_t * payload_tvb = NULL;
heur_dtbl_entry_t *hdtbl_entry = NULL;
proto_item * item = NULL;
@@ -1898,11 +1898,12 @@ dissect_epl_payload ( proto_tree *epl_tree, tvbuff_t *tvb, packet_info *pinfo, g
if (len > 0)
{
- payload_tvb = tvb_new_subset_remaining(tvb, off);
- rem_len = tvb_captured_length_remaining(payload_tvb, 0);
- if ( rem_len < len )
+ rem_len = tvb_captured_length_remaining(tvb, 0);
+ payload_tvb = tvb_new_subset_length(tvb, off, len > rem_len ? rem_len : len);
+ pld_rem_len = tvb_captured_length_remaining(payload_tvb, 0);
+ if ( pld_rem_len < len )
{
- item = proto_tree_add_uint(epl_tree, hf_epl_payload_real, tvb, off, rem_len, rem_len);
+ item = proto_tree_add_uint(epl_tree, hf_epl_payload_real, tvb, off, pld_rem_len, pld_rem_len);
PROTO_ITEM_SET_GENERATED(item);
expert_add_info(pinfo, item, &ei_real_length_differs );
}