aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-evrc.c
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2011-11-16 01:37:32 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2011-11-16 01:37:32 +0000
commit28e5ff6098149ab3b791e9e577d62f3496ac6c2e (patch)
tree039f9ddb174b8fb37b702388b889158e7a3a590f /epan/dissectors/packet-evrc.c
parent225d9b98effa8321bdf59fee693d34bb97332747 (diff)
Delete pointless orig_offset variable, initialize speech_data_len[], use tvb_reported_length() instead of tvb_length(), and protect against a possible buffer overflow. This should fix the Clang warning, "packet-evrc.c:364:41: warning: The right operand of '>=' is a garbage value", among other things.
svn path=/trunk/; revision=39872
Diffstat (limited to 'epan/dissectors/packet-evrc.c')
-rw-r--r--epan/dissectors/packet-evrc.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/epan/dissectors/packet-evrc.c b/epan/dissectors/packet-evrc.c
index 7c150cefac..d2889c539f 100644
--- a/epan/dissectors/packet-evrc.c
+++ b/epan/dissectors/packet-evrc.c
@@ -206,7 +206,7 @@ dissect_evrc_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, evrc_varia
guint8 oct;
guint8 frame_count;
guint8 i;
- guint32 offset, orig_offset, saved_offset;
+ guint32 offset, saved_offset;
gboolean further_entries;
guint32 len;
proto_item *item = NULL;
@@ -228,14 +228,13 @@ dissect_evrc_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, evrc_varia
if (!tree) return;
offset = 0;
- orig_offset = offset;
-
g_pinfo = pinfo;
g_tree = tree;
+ memset(speech_data_len, 0, sizeof(speech_data_len));
if (NULL == tree) return;
- len = tvb_length(tvb);
+ len = tvb_reported_length(tvb);
item = proto_tree_add_item(tree, proto_evrc, tvb, 0, -1, ENC_NA);
@@ -253,8 +252,8 @@ dissect_evrc_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, evrc_varia
frame_count = 0;
further_entries = TRUE;
- while (further_entries &&
- ((len - (offset - orig_offset)) > 0))
+ while (further_entries && (frame_count < sizeof(speech_data_len)) &&
+ ((len - offset) > 0))
{
item =
proto_tree_add_text(evrc_tree, tvb, offset, 1, "ToC [%u]", frame_count+1);
@@ -327,7 +326,7 @@ dissect_evrc_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, evrc_varia
i = 0;
while ((i < frame_count) &&
- ((len - (offset - orig_offset)) > 0))
+ ((len - offset) > 0))
{
oct = tvb_get_guint8(tvb, offset);
@@ -361,7 +360,7 @@ dissect_evrc_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, evrc_varia
i = 0;
while ((i < frame_count) &&
- ((len - (offset - orig_offset)) >= speech_data_len[i]))
+ ((len - offset) >= speech_data_len[i]))
{
proto_tree_add_text(evrc_tree, tvb, offset, speech_data_len[i], "Speech Data [%u]", i+1);