aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexis La Goutte <alexis.lagoutte@gmail.com>2016-11-03 08:49:10 +0100
committerMichael Mann <mmann78@netscape.net>2016-11-03 11:45:35 +0000
commitdcd0bed7a97edc2f19a63bdf9b7ff6dcb37cd96b (patch)
tree340620ea638c24fb89157daf98eef2fea0be38f0
parent9490f5e98db1c18aa527464373ac149ed3ac285b (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>
-rw-r--r--epan/dissectors/packet-usb-audio.c10
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);