aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2015-01-19 15:15:45 -0500
committerBill Meier <wmeier@newsguy.com>2015-01-19 20:50:26 +0000
commit7e1d73d0d4d4852f14d5ac3e2dcf699d0467043b (patch)
tree5826d3b213132f353c834aec4c620b9dc65764d2 /epan
parentd1cace99e57643a8f836803b2bc9cac50e42ac98 (diff)
dmp, gmhdr, vssmonitoring: prevent possible crashes;
gmtime()/localtime() can return NULL. Change-Id: If0589261429ee15d0c07972a99d94f9fe83626f6 Reviewed-on: https://code.wireshark.org/review/6660 Reviewed-by: Bill Meier <wmeier@newsguy.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-dmp.c4
-rw-r--r--epan/dissectors/packet-gmhdr.c7
-rw-r--r--epan/dissectors/packet-vssmonitoring.c7
3 files changed, 15 insertions, 3 deletions
diff --git a/epan/dissectors/packet-dmp.c b/epan/dissectors/packet-dmp.c
index 3ba0b65f7b..d3221ab6f2 100644
--- a/epan/dissectors/packet-dmp.c
+++ b/epan/dissectors/packet-dmp.c
@@ -156,6 +156,7 @@ void proto_reg_handoff_dmp(void);
#define DMP_TIME_RESERVED -2
#define ILLEGAL_FORMAT "<Illegal format>"
+#define TIME_NOT_REPRESENTABLE "<Time not representable>"
/* Maximum lengths */
#define MAX_SIC_LEN 30
@@ -1687,6 +1688,9 @@ static const gchar *dissect_thales_ipm_id (tvbuff_t *tvb, gint offset, gint leng
time_t timev = tvb_get_ntohl(tvb, offset + length - 4);
struct tm *tmp = gmtime(&timev);
+ if (tmp == NULL)
+ return TIME_NOT_REPRESENTABLE;
+
if (modifier == 1 && number >= 1024) {
/* The number is in the range 65536-99999 */
number_len = 5;
diff --git a/epan/dissectors/packet-gmhdr.c b/epan/dissectors/packet-gmhdr.c
index da847f85e1..6447c58ab0 100644
--- a/epan/dissectors/packet-gmhdr.c
+++ b/epan/dissectors/packet-gmhdr.c
@@ -313,13 +313,18 @@ dissect_gmtimestamp_trailer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
if (gmtrailer_summary_in_tree) {
offset += 4;
port_num = tvb_get_ntohs(tvb, offset);
+ proto_item_append_text(ti, ", Port: %d, Timestamp: ", port_num);
offset += 2;
+
gmtimev.secs = tvb_get_ntohl(tvb, offset);
offset += 4;
gmtimev.nsecs = tvb_get_ntohl(tvb, offset);
tm = localtime(&gmtimev.secs);
- proto_item_append_text(ti, ", Port: %d, Timestamp: %d:%02d:%02d.%09d", port_num, tm->tm_hour, tm->tm_min, tm->tm_sec, gmtimev.nsecs);
+ if (tm)
+ proto_item_append_text(ti, "%d:%02d:%02d.%09d", tm->tm_hour, tm->tm_min, tm->tm_sec, gmtimev.nsecs);
+ else
+ proto_item_append_text(ti, "<Not representable>");
}
offset = 0;
diff --git a/epan/dissectors/packet-vssmonitoring.c b/epan/dissectors/packet-vssmonitoring.c
index 6679785d13..565a36bc75 100644
--- a/epan/dissectors/packet-vssmonitoring.c
+++ b/epan/dissectors/packet-vssmonitoring.c
@@ -172,8 +172,11 @@ dissect_vssmonitoring(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
proto_tree_add_uint(vssmonitoring_tree, hf_vssmonitoring_clksrc, tvb, offset + 4, 1, vssmonitoring_clksrc);
tmp = localtime(&vssmonitoring_time.secs);
- proto_item_append_text(ti, ", Timestamp: %02d:%02d:%02d.%09ld",
- tmp->tm_hour, tmp->tm_min, tmp->tm_sec,(long)vssmonitoring_time.nsecs);
+ if (tmp)
+ proto_item_append_text(ti, ", Timestamp: %02d:%02d:%02d.%09ld",
+ tmp->tm_hour, tmp->tm_min, tmp->tm_sec,(long)vssmonitoring_time.nsecs);
+ else
+ proto_item_append_text(ti, ", Timestamp: <Not representable>");
}
offset += 8;
}