diff options
author | Chris Maynard <Christopher.Maynard@GTECH.COM> | 2013-12-10 22:01:55 +0000 |
---|---|---|
committer | Chris Maynard <Christopher.Maynard@GTECH.COM> | 2013-12-10 22:01:55 +0000 |
commit | a57b528c870fa4b5d41ac750b24ebba8a4650305 (patch) | |
tree | d0bb6b3d14b68fe22f1661863e941f1bfd262d79 /epan/dissectors/packet-usb-masstorage.c | |
parent | 10320787281b2f7a1a179a9953b989416e878e62 (diff) |
Reject packets if data (and usb_trans_info) are NULL. Also, new-syle dissectors return the number of bytes dissected, not TRUE/FALSE.
svn path=/trunk/; revision=53922
Diffstat (limited to 'epan/dissectors/packet-usb-masstorage.c')
-rw-r--r-- | epan/dissectors/packet-usb-masstorage.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/epan/dissectors/packet-usb-masstorage.c b/epan/dissectors/packet-usb-masstorage.c index 6849e4f35c..d0d342da6e 100644 --- a/epan/dissectors/packet-usb-masstorage.c +++ b/epan/dissectors/packet-usb-masstorage.c @@ -123,19 +123,24 @@ static const value_string setup_request_names_vals[] = { }; /* Dissector for mass storage control . - * Returns TRUE if a class specific dissector was found - * and FALSE othervise. + * Returns tvb_length(tvb) if a class specific dissector was found + * and 0 othervise. */ static gint dissect_usb_ms_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { gboolean is_request; - 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; is_request=(pinfo->srcport==NO_ENDPOINT); @@ -147,13 +152,12 @@ dissect_usb_ms_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void } } /* No we could not find any class specific dissector for this request - * return FALSE and let USB try any of the standard requests. + * return 0 and let USB try any of the standard requests. */ if(!dissector){ - return FALSE; + return 0; } - col_set_str(pinfo->cinfo, COL_PROTOCOL, "USBMS"); col_add_fstr(pinfo->cinfo, COL_INFO, "%s %s", @@ -166,7 +170,7 @@ dissect_usb_ms_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void } dissector(pinfo, tree, tvb, offset, is_request, usb_trans_info, usb_conv_info); - return TRUE; + return tvb_length(tvb); } |