aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2013-10-15 15:15:59 +0000
committerMartin Kaiser <wireshark@kaiser.cx>2013-10-15 15:15:59 +0000
commit156659e308cd83aa0e13ed73650eb9d155d7506a (patch)
treea08d527fc4a0a63a9c8d348c556ad3a6075767ee /wiretap
parentef33b36768e0ad010818b147d8a847968b37dde5 (diff)
limit the values written to phdr.(cap)len to guint32, not to guint16
We read a two-byte length field and add a constant number of header bytes to this length, so we could in theory be larger than guint16. svn path=/trunk/; revision=52619
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/vwr.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/wiretap/vwr.c b/wiretap/vwr.c
index 97a650dca3..5de2b5bca1 100644
--- a/wiretap/vwr.c
+++ b/wiretap/vwr.c
@@ -1047,7 +1047,7 @@ static int parse_s1_W_stats(wtap *wth, guint8 *rec, int rec_size, ext_rtap_field
register int i; /* temps */
register guint8 *s_ptr, *m_ptr; /* stats pointer */
guint16 octets, msdu_length; /* octets in frame */
- guint32 tmp_len;
+ guint64 tmp_len;
guint16 rflags;
guint8 m_type, flow_seq; /* mod type (CCK-L/CCK-S/OFDM), seqnum */
guint64 s_time = LL_ZERO, e_time = LL_ZERO; /* start/end */
@@ -1147,9 +1147,9 @@ static int parse_s1_W_stats(wtap *wth, guint8 *rec, int rec_size, ext_rtap_field
r_hdr_len = STATS_COMMON_FIELDS_LEN + EXT_RTAP_FIELDS_LEN;
tmp_len = (msdu_length - 4) + r_hdr_len;
- wth->phdr.len = tmp_len<=G_MAXUINT16 ? tmp_len : 0;
+ wth->phdr.len = tmp_len<=G_MAXUINT32 ? tmp_len : 0;
tmp_len = (octets - 4) + r_hdr_len;
- wth->phdr.caplen = tmp_len<=G_MAXUINT16 ? tmp_len : 0;
+ wth->phdr.caplen = tmp_len<=G_MAXUINT32 ? tmp_len : 0;
wth->phdr.len = (msdu_length - 4) + r_hdr_len;
wth->phdr.caplen = (octets - 4) + r_hdr_len;
@@ -1219,7 +1219,7 @@ static int parse_s2_W_stats(wtap *wth, guint8 *rec, int rec_size, ext_rtap_field
register int i; /* temps */
register guint8 *s_start_ptr,*s_trail_ptr, *plcp_ptr, *m_ptr; /* stats & MPDU ptr */
guint32 msdu_length, actual_octets; /* octets in frame */
- guint32 tmp_len;
+ guint64 tmp_len;
guint8 l1p_1,l1p_2, flow_seq, plcp_type, mcs_index, nss; /* mod (CCK-L/CCK-S/OFDM) */
guint64 s_time = LL_ZERO, e_time = LL_ZERO; /* start/end */
/* times, nsec */
@@ -1409,9 +1409,9 @@ static int parse_s2_W_stats(wtap *wth, guint8 *rec, int rec_size, ext_rtap_field
/* the FCS is NOT included */
r_hdr_len = STATS_COMMON_FIELDS_LEN + EXT_RTAP_FIELDS_LEN;
tmp_len = (actual_octets - 4) + r_hdr_len;
- wth->phdr.len = tmp_len<=G_MAXUINT16 ? tmp_len : 0;
+ wth->phdr.len = tmp_len<=G_MAXUINT32 ? tmp_len : 0;
tmp_len = (msdu_length - 4) + r_hdr_len;
- wth->phdr.caplen = tmp_len<=G_MAXUINT16 ? tmp_len : 0;
+ wth->phdr.caplen = tmp_len<=G_MAXUINT32 ? tmp_len : 0;
wth->phdr.presence_flags = WTAP_HAS_TS;