aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb-masstorage.c
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2013-12-10 22:01:55 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2013-12-10 22:01:55 +0000
commita57b528c870fa4b5d41ac750b24ebba8a4650305 (patch)
treed0bb6b3d14b68fe22f1661863e941f1bfd262d79 /epan/dissectors/packet-usb-masstorage.c
parent10320787281b2f7a1a179a9953b989416e878e62 (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.c20
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);
}