diff options
author | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2016-11-03 08:49:10 +0100 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2016-11-03 11:45:35 +0000 |
commit | dcd0bed7a97edc2f19a63bdf9b7ff6dcb37cd96b (patch) | |
tree | 340620ea638c24fb89157daf98eef2fea0be38f0 /epan/dissectors/packet-usb-audio.c | |
parent | 9490f5e98db1c18aa527464373ac149ed3ac285b (diff) |
USB Audio: Fix dissection of unit descriptors missing the iFeature field
Issue reported by Vladimir Vysotsky
Bug: 13085
Change-Id: Ibdc1bf662f852818777cfb44fa19d798972390ca
Reviewed-on: https://code.wireshark.org/review/18651
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-usb-audio.c')
-rw-r--r-- | epan/dissectors/packet-usb-audio.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/epan/dissectors/packet-usb-audio.c b/epan/dissectors/packet-usb-audio.c index c3b871a84c..8376d9c6c4 100644 --- a/epan/dissectors/packet-usb-audio.c +++ b/epan/dissectors/packet-usb-audio.c @@ -580,7 +580,7 @@ dissect_ac_if_output_terminal(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_ static gint dissect_ac_if_feature_unit(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, - proto_tree *tree, usb_conv_info_t *usb_conv_info _U_) + proto_tree *tree, usb_conv_info_t *usb_conv_info _U_, guint8 desc_len) { gint offset_start; guint8 controlsize; @@ -627,8 +627,10 @@ dissect_ac_if_feature_unit(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, offset += controlsize; - proto_tree_add_item(tree, hf_ac_if_fu_ifeature, tvb, offset, 1, ENC_LITTLE_ENDIAN); - offset += 1; + if(offset < desc_len){ + proto_tree_add_item(tree, hf_ac_if_fu_ifeature, tvb, offset, 1, ENC_LITTLE_ENDIAN); + offset += 1; + } return offset-offset_start; } @@ -856,7 +858,7 @@ dissect_usb_audio_descriptor(tvbuff_t *tvb, packet_info *pinfo, dissect_ac_if_mixed_unit(tvb, offset, pinfo, desc_tree, usb_conv_info); break; case AC_SUBTYPE_FEATURE_UNIT: - dissect_ac_if_feature_unit(tvb, offset, pinfo, desc_tree, usb_conv_info); + dissect_ac_if_feature_unit(tvb, offset, pinfo, desc_tree, usb_conv_info, desc_len); break; default: proto_tree_add_expert(desc_tree, pinfo, &ei_usb_audio_undecoded, tvb, offset-3, desc_len); |