aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/netscaler.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/wiretap/netscaler.c b/wiretap/netscaler.c
index 97eed67cf4..87d5dc9ba6 100644
--- a/wiretap/netscaler.c
+++ b/wiretap/netscaler.c
@@ -1274,22 +1274,23 @@ static gboolean nstrace_read_v20(wtap *wth, int *err, gchar **err_info, gint64 *
}\
nst_dataSize = nspr_getv20recordsize(hdp);\
rec_size = nst_dataSize - nstrace_tmpbuff_off;\
- nsg_nextPageOffset = ((nstrace_buf_offset + rec_size) >= NSPR_PAGESIZE_TRACE) ?\
+ nsg_nextPageOffset = ((nstrace_buf_offset + rec_size) >= (guint)nstrace->nstrace_buflen) ?\
((nstrace_buf_offset + rec_size) - (NSPR_PAGESIZE_TRACE - 1)) : 0;\
while (nsg_nextPageOffset) {\
- while (nstrace_buf_offset < NSPR_PAGESIZE_TRACE) {\
+ while (nstrace_buf_offset < nstrace->nstrace_buflen) {\
nstrace_tmpbuff[nstrace_tmpbuff_off++] = nstrace_buf[nstrace_buf_offset++];\
}\
- nstrace_buflen = NSPR_PAGESIZE_TRACE;\
nstrace->xxx_offset += nstrace_buflen;\
+ nstrace_buflen = NSPR_PAGESIZE_TRACE;\
bytes_read = file_read(nstrace_buf, NSPR_PAGESIZE_TRACE, wth->fh);\
if ( !file_eof(wth->fh) && bytes_read != NSPR_PAGESIZE_TRACE) {\
return FALSE;\
} else {\
nstrace_buf_offset = 0;\
}\
+ nstrace_buflen = bytes_read;\
rec_size = nst_dataSize - nstrace_tmpbuff_off;\
- nsg_nextPageOffset = ((nstrace_buf_offset + rec_size) >= NSPR_PAGESIZE_TRACE) ?\
+ nsg_nextPageOffset = ((nstrace_buf_offset + rec_size) >= (guint)nstrace->nstrace_buflen) ?\
((nstrace_buf_offset + rec_size) - (NSPR_PAGESIZE_TRACE- 1)): 0;\
} \
while (nstrace_tmpbuff_off < nst_dataSize) {\
@@ -1297,7 +1298,7 @@ static gboolean nstrace_read_v20(wtap *wth, int *err, gchar **err_info, gint64 *
}\
memcpy(ws_buffer_start_ptr(wth->frame_buffer), nstrace_tmpbuff, (phdr)->caplen);\
nstrace->nstrace_buf_offset = nstrace_buf_offset;\
- nstrace->nstrace_buflen = nstrace_buflen = ((gint32)NSPR_PAGESIZE_TRACE);\
+ nstrace->nstrace_buflen = nstrace_buflen;\
nstrace->nsg_creltime = nsg_creltime;\
return TRUE;\
} while(0)
@@ -1315,6 +1316,9 @@ static gboolean nstrace_read_v30(wtap *wth, int *err, gchar **err_info, gint64 *
int bytes_read = 0;
*err = 0;
*err_info = NULL;
+ if(nstrace_buflen == 0){
+ return FALSE; /* Reached End Of File */
+ }
do
{
@@ -1328,6 +1332,11 @@ static gboolean nstrace_read_v30(wtap *wth, int *err, gchar **err_info, gint64 *
nstrace_buf[nstrace_buf_offset])
{
hdp = (nspr_hd_v20_t *) &nstrace_buf[nstrace_buf_offset];
+ if(nspr_getv20recordsize(hdp) == 0){
+ *err=WTAP_ERR_BAD_FILE;
+ *err_info = g_strdup("Zero size record found");
+ return FALSE;
+ }
switch (hdp->phd_RecordType)
{