aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb-video.c
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2013-12-10 22:04:00 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2013-12-10 22:04:00 +0000
commit90f5deac446c805a071d61271ad616aadcfbb2ef (patch)
tree078b4e3640c46e9b0c96e87dd0e5355935c8d1a7 /epan/dissectors/packet-usb-video.c
parenta57b528c870fa4b5d41ac750b24ebba8a4650305 (diff)
Where appropriate, reject the packet entirely or at least protect against data being NULL.
svn path=/trunk/; revision=53923
Diffstat (limited to 'epan/dissectors/packet-usb-video.c')
-rw-r--r--epan/dissectors/packet-usb-video.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/epan/dissectors/packet-usb-video.c b/epan/dissectors/packet-usb-video.c
index 6480f4c0c8..fcbfe3f83d 100644
--- a/epan/dissectors/packet-usb-video.c
+++ b/epan/dissectors/packet-usb-video.c
@@ -1490,13 +1490,13 @@ dissect_usb_vid_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
else if (descriptor_type == CS_INTERFACE)
{
- if (usb_conv_info->interfaceSubclass == SC_VIDEOCONTROL)
+ if (usb_conv_info && usb_conv_info->interfaceSubclass == SC_VIDEOCONTROL)
{
offset = dissect_usb_video_control_interface_descriptor(tree, desc_tvb,
descriptor_len,
pinfo, usb_conv_info);
}
- else if (usb_conv_info->interfaceSubclass == SC_VIDEOSTREAMING)
+ else if (usb_conv_info && usb_conv_info->interfaceSubclass == SC_VIDEOSTREAMING)
{
offset = dissect_usb_video_streaming_interface_descriptor(tree, desc_tvb,
descriptor_len);
@@ -1602,6 +1602,9 @@ get_control_selector_values(guint8 entity_id, usb_conv_info_t *usb_conv_info)
video_entity_t *entity = NULL;
const value_string_ext *selectors = NULL;
+ if (usb_conv_info == NULL)
+ return NULL;
+
video_conv_info = (video_conv_info_t *)usb_conv_info->class_data;
if (video_conv_info)
entity = (video_entity_t*) wmem_tree_lookup32(video_conv_info->entities, entity_id);
@@ -1994,12 +1997,18 @@ static int
dissect_usb_vid_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
gboolean is_request = (pinfo->srcport == NO_ENDPOINT);
- usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
- usb_trans_info_t *usb_trans_info = usb_conv_info->usb_trans_info;
+ usb_conv_info_t *usb_conv_info;
+ usb_trans_info_t *usb_trans_info;
int offset = 0;
usb_setup_dissector dissector = NULL;
const usb_setup_dissector_table_t *tmp;
+ /* Reject the packet if data or usb_trans_info are NULL */
+ if (data == NULL || ((usb_conv_info_t *)data)->usb_trans_info == NULL)
+ return 0;
+ usb_conv_info = (usb_conv_info_t *)data;
+ usb_trans_info = usb_conv_info->usb_trans_info;
+
/* See if we can find a class specific dissector for this request */
for (tmp=setup_dissectors; tmp->dissector; tmp++)
{