aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gvsp.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2015-07-17 19:24:04 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2015-07-19 21:05:13 +0000
commit030da2a6118342a77be7d4676d5ddb55f2215dbb (patch)
treea3b13e6e59ce7faa18342680cce3851088b5a47b /epan/dissectors/packet-gvsp.c
parent21b99e3eced4fc4d016fe1293e44966ebbcbd291 (diff)
coverity 1250812: fix a (very unlikely) integer overflow
Change-Id: I151cb2186c7dabbab1bef5cd35dabe19a3600dfd Reviewed-on: https://code.wireshark.org/review/9703 Petri-Dish: Martin Kaiser <wireshark@kaiser.cx> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-gvsp.c')
-rw-r--r--epan/dissectors/packet-gvsp.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/epan/dissectors/packet-gvsp.c b/epan/dissectors/packet-gvsp.c
index 8d08010cf9..e68d4182dc 100644
--- a/epan/dissectors/packet-gvsp.c
+++ b/epan/dissectors/packet-gvsp.c
@@ -689,8 +689,11 @@ static gint dissect_file_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_inf
file_length = tvb_strsize(tvb, offset + 20);
proto_tree_add_item(gvsp_tree, hf_gvsp_filename, tvb, offset + 20, file_length, ENC_ASCII|ENC_NA);
+ if (20 + file_length > G_MAXINT)
+ return -1;
+
/* Return dissected byte count (for all-in dissection) */
- return 20 + file_length;
+ return (gint)(20 + file_length);
}
@@ -1006,6 +1009,8 @@ static void dissect_packet_payload_multizone(proto_tree *gvsp_tree, tvbuff_t *tv
static void dissect_packet_all_in(proto_tree *gvsp_tree, tvbuff_t *tvb, gint offset, packet_info *pinfo, gvsp_packet_info *info)
{
+ gint ret;
+
switch (info->payloadtype)
{
case GVSP_PAYLOAD_IMAGE:
@@ -1029,7 +1034,10 @@ static void dissect_packet_all_in(proto_tree *gvsp_tree, tvbuff_t *tvb, gint off
break;
case GVSP_PAYLOAD_FILE:
- offset += dissect_file_leader(gvsp_tree, tvb, pinfo, offset);
+ ret = dissect_file_leader(gvsp_tree, tvb, pinfo, offset);
+ if (ret < 0)
+ break;
+ offset += ret;
offset += dissect_generic_trailer(gvsp_tree, tvb, pinfo, offset);
if (info->chunk != 0)
{