diff options
author | Roland Knall <roland.knall@br-automation.com> | 2015-08-05 09:36:20 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2015-08-05 20:46:27 +0000 |
commit | 6aabad5b336b9933d3b764d2f84dd664de82f88f (patch) | |
tree | e12fcdd9ddbcbbb991bb71d2022cb23771d63cf1 /epan/dissectors/packet-epl.c | |
parent | 504f5b34787c4e02a7fdcf14e8fe346547a371d5 (diff) |
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.c | 11 |
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 ); } |