aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-bthfp.c
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2013-07-01 05:58:41 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2013-07-01 05:58:41 +0000
commit8bfc3f68653f65a68bf19c8ee50492c7139db7c7 (patch)
tree4220e585002c0228d13d3580b7c94e66f4a55b6f /epan/dissectors/packet-bthfp.c
parentbfcaf93bff87c775ab813d36bfc0a5561d5dd53a (diff)
Return from dissect_at_command() immediately if tvb_length_remaining() returns -1.
svn path=/trunk/; revision=50284
Diffstat (limited to 'epan/dissectors/packet-bthfp.c')
-rw-r--r--epan/dissectors/packet-bthfp.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/epan/dissectors/packet-bthfp.c b/epan/dissectors/packet-bthfp.c
index a5cd715976..5d6407f37a 100644
--- a/epan/dissectors/packet-bthfp.c
+++ b/epan/dissectors/packet-bthfp.c
@@ -875,11 +875,11 @@ dissect_at_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint8 *col_str = NULL;
guint8 *at_stream;
guint8 *at_command = NULL;
- guint i_char = 0;
+ gint i_char = 0;
guint i_char_fix = 0;
- guint length;
+ gint length;
const at_cmd_t *i_at_cmd;
- guint parameter_length;
+ gint parameter_length;
guint parameter_number;
guint16 type = TYPE_UNKNOWN;
guint32 brackets;
@@ -887,6 +887,9 @@ dissect_at_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gboolean next;
length = tvb_length_remaining(tvb, offset);
+ if (length <= 0)
+ return tvb_length(tvb);
+
if (!command_number) {
proto_tree_add_item(tree, hf_data, tvb, offset, length, ENC_NA | ENC_ASCII);
col_str = (guint8 *) wmem_alloc(wmem_packet_scope(), length + 1);
@@ -1118,8 +1121,11 @@ dissect_at_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
i_char += i_char_fix;
proto_item_set_len(command_item, i_char);
} else {
- proto_item_set_len(command_item, tvb_length_remaining(tvb, offset));
- offset += tvb_length_remaining(tvb, offset);
+ length = tvb_length_remaining(tvb, offset);
+ if (length < 0)
+ length = 0;
+ proto_item_set_len(command_item, length);
+ offset += length;
}
return offset;