aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2012-12-27 12:19:25 +0000
committerGuy Harris <guy@alum.mit.edu>2012-12-27 12:19:25 +0000
commit88e9d1c1e52c95317d59a1560285a9dd8c4ce7a0 (patch)
treefa21aca9e64f751847054d3aa54557afbaef56b0 /wiretap
parent12317316aed7e871b9537431d0c10013af3547db (diff)
Do not call wtap_file_read_unknown_bytes() or
wtap_file_read_expected_bytes() from an open routine - open routines are supposed to return -1 on error, 0 if the file doesn't appear to be a file of the specified type, or 1 if the file does appear to be a file of the specified type, but those macros will cause the caller to return FALSE on errors (so that, even if there's an I/O error, it reports "the file isn't a file of the specified type" rather than "we got an error trying to read the file"). When doing reads in an open routine before we've concluded that the file is probably of the right type, return 0, rather than -1, if we get WTAP_ERR_SHORT_READ - if we don't have enough data to check whether a file is of a given type, we should keep trying other types, not give up. For reads done *after* we've concluded the file is probably of the right type, if a read doesn't return the number of bytes we asked for, but returns an error of 0, return WTAP_ERR_SHORT_READ - the file is apparently cut short. For NetMon and NetXRay/Windows Sniffer files, use a #define for the magic number size, and use that for both magic numbers. svn path=/trunk/; revision=46803
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/5views.c8
-rw-r--r--wiretap/aethra.c8
-rw-r--r--wiretap/ascendtext.c12
-rw-r--r--wiretap/ber.c4
-rw-r--r--wiretap/btsnoop.c8
-rw-r--r--wiretap/commview.c8
-rw-r--r--wiretap/cosine.c35
-rw-r--r--wiretap/csids.c17
-rw-r--r--wiretap/daintree-sna.c16
-rw-r--r--wiretap/dbs-etherwatch.c5
-rw-r--r--wiretap/dct3trace.c48
-rw-r--r--wiretap/erf.c5
-rw-r--r--wiretap/eyesdn.c2
-rw-r--r--wiretap/hcidump.c8
-rw-r--r--wiretap/i4btrace.c2
-rw-r--r--wiretap/ipfix.c2
-rw-r--r--wiretap/iptrace.c4
-rw-r--r--wiretap/iseries.c71
-rw-r--r--wiretap/k12.c2
-rw-r--r--wiretap/lanalyzer.c45
-rw-r--r--wiretap/libpcap.c8
-rw-r--r--wiretap/mime_file.c60
-rw-r--r--wiretap/mp2t.c8
-rw-r--r--wiretap/mpeg.c2
-rw-r--r--wiretap/netmon.c29
-rw-r--r--wiretap/netscaler.c2
-rw-r--r--wiretap/netscreen.c10
-rw-r--r--wiretap/nettl.c8
-rw-r--r--wiretap/network_instruments.c12
-rw-r--r--wiretap/netxray.c25
-rw-r--r--wiretap/ngsniffer.c21
-rw-r--r--wiretap/packetlogger.c15
-rw-r--r--wiretap/pcapng.c2
-rw-r--r--wiretap/peekclassic.c22
-rw-r--r--wiretap/peektagged.c10
-rw-r--r--wiretap/pppdump.c10
-rw-r--r--wiretap/radcom.c8
-rw-r--r--wiretap/snoop.c17
-rw-r--r--wiretap/tnef.c4
-rw-r--r--wiretap/toshiba.c48
-rw-r--r--wiretap/visual.c8
-rw-r--r--wiretap/vms.c5
-rw-r--r--wiretap/vwr.c12
43 files changed, 332 insertions, 324 deletions
diff --git a/wiretap/5views.c b/wiretap/5views.c
index 9629c2e691..1b0a54c701 100644
--- a/wiretap/5views.c
+++ b/wiretap/5views.c
@@ -126,7 +126,7 @@ int _5views_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&Capture_Header.Info_Header, sizeof(t_5VW_Info_Header), wth->fh);
if (bytes_read != sizeof(t_5VW_Info_Header)) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -180,9 +180,9 @@ int _5views_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&Capture_Header.HeaderDateCreation, sizeof (t_5VW_Capture_Header) - sizeof(t_5VW_Info_Header), wth->fh);
if (bytes_read != sizeof (t_5VW_Capture_Header)- sizeof(t_5VW_Info_Header) ) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
/* This is a 5views capture file */
diff --git a/wiretap/aethra.c b/wiretap/aethra.c
index 6220fecf40..d04bf8d875 100644
--- a/wiretap/aethra.c
+++ b/wiretap/aethra.c
@@ -136,7 +136,7 @@ int aethra_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(hdr.magic, sizeof hdr.magic, wth->fh);
if (bytes_read != sizeof hdr.magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -150,9 +150,9 @@ int aethra_open(wtap *wth, int *err, gchar **err_info)
sizeof hdr - sizeof hdr.magic, wth->fh);
if (bytes_read != sizeof hdr - sizeof hdr.magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
wth->file_type = WTAP_FILE_AETHRA;
aethra = (aethra_t *)g_malloc(sizeof(aethra_t));
diff --git a/wiretap/ascendtext.c b/wiretap/ascendtext.c
index 1a77ea427e..cace17ed4f 100644
--- a/wiretap/ascendtext.c
+++ b/wiretap/ascendtext.c
@@ -148,12 +148,11 @@ static gint64 ascend_seek(wtap *wth, int *err, gchar **err_info)
}
}
- if (byte != EOF || file_eof(wth->fh)) {
- /* Either we didn't find the offset, or we got an EOF. */
+ if (byte != EOF) {
+ /* We didn't find the offset. Treat that as a "not an Ascend file"
+ indication. */
*err = 0;
} else {
- /* We (presumably) got an error (there's no equivalent to "ferror()"
- in zlib, alas, so we don't have a wrapper to check for an error). */
*err = file_error(wth->fh, err_info);
}
return -1;
@@ -187,10 +186,9 @@ int ascend_open(wtap *wth, int *err, gchar **err_info)
offset = ascend_seek(wth, err, err_info);
if (offset == -1) {
- if (*err == 0)
- return 0;
- else
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
+ return 0;
}
/* Do a trial parse of the first packet just found to see if we might really have an Ascend file */
diff --git a/wiretap/ber.c b/wiretap/ber.c
index 3dfe78b462..990db1de73 100644
--- a/wiretap/ber.c
+++ b/wiretap/ber.c
@@ -131,7 +131,9 @@ int ber_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&bytes, BER_BYTES_TO_CHECK, wth->fh);
if (bytes_read != BER_BYTES_TO_CHECK) {
*err = file_error(wth->fh, err_info);
- return (*err != 0) ? -1 : 0;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
ber_id = bytes[offset++];
diff --git a/wiretap/btsnoop.c b/wiretap/btsnoop.c
index baa8812214..3666cbb68b 100644
--- a/wiretap/btsnoop.c
+++ b/wiretap/btsnoop.c
@@ -92,7 +92,7 @@ int btsnoop_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(magic, sizeof magic, wth->fh);
if (bytes_read != sizeof magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -106,9 +106,9 @@ int btsnoop_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&hdr, sizeof hdr, wth->fh);
if (bytes_read != sizeof hdr) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
/*
diff --git a/wiretap/commview.c b/wiretap/commview.c
index 5fe51ea8b5..935d15f01b 100644
--- a/wiretap/commview.c
+++ b/wiretap/commview.c
@@ -96,11 +96,9 @@ int commview_open(wtap *wth, int *err, gchar **err_info)
commview_header_t cv_hdr;
if(!commview_read_header(&cv_hdr, wth->fh, err, err_info)) {
- if (*err == 0 || *err == WTAP_ERR_SHORT_READ) {
- /* This just means "not CommView" */
- return 0;
- }
- return -1;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
/* If any of these fields do not match what we expect, bail out. */
diff --git a/wiretap/cosine.c b/wiretap/cosine.c
index b2ad78daf4..f0d67306c7 100644
--- a/wiretap/cosine.c
+++ b/wiretap/cosine.c
@@ -253,26 +253,22 @@ static gboolean cosine_check_file_type(wtap *wth, int *err, gchar **err_info)
buf[COSINE_LINE_LENGTH-1] = '\0';
for (line = 0; line < COSINE_HEADER_LINES_TO_CHECK; line++) {
- if (file_gets(buf, COSINE_LINE_LENGTH, wth->fh) != NULL) {
-
- reclen = strlen(buf);
- if (reclen < strlen(COSINE_HDR_MAGIC_STR1) ||
- reclen < strlen(COSINE_HDR_MAGIC_STR2)) {
- continue;
- }
-
- if (strstr(buf, COSINE_HDR_MAGIC_STR1) ||
- strstr(buf, COSINE_HDR_MAGIC_STR2)) {
- return TRUE;
- }
- } else {
+ if (file_gets(buf, COSINE_LINE_LENGTH, wth->fh) == NULL) {
/* EOF or error. */
- if (file_eof(wth->fh))
- *err = 0;
- else
- *err = file_error(wth->fh, err_info);
+ *err = file_error(wth->fh, err_info);
return FALSE;
}
+
+ reclen = strlen(buf);
+ if (reclen < strlen(COSINE_HDR_MAGIC_STR1) ||
+ reclen < strlen(COSINE_HDR_MAGIC_STR2)) {
+ continue;
+ }
+
+ if (strstr(buf, COSINE_HDR_MAGIC_STR1) ||
+ strstr(buf, COSINE_HDR_MAGIC_STR2)) {
+ return TRUE;
+ }
}
*err = 0;
return FALSE;
@@ -283,10 +279,9 @@ int cosine_open(wtap *wth, int *err, gchar **err_info)
{
/* Look for CoSine header */
if (!cosine_check_file_type(wth, err, err_info)) {
- if (*err == 0)
- return 0;
- else
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
+ return 0;
}
if (file_seek(wth->fh, 0L, SEEK_SET, err) == -1) /* rewind */
diff --git a/wiretap/csids.c b/wiretap/csids.c
index 9555e005da..08f60f05ea 100644
--- a/wiretap/csids.c
+++ b/wiretap/csids.c
@@ -79,11 +79,10 @@ int csids_open(wtap *wth, int *err, gchar **err_info)
bytesRead = file_read( &hdr, sizeof( struct csids_header), wth->fh );
if( bytesRead != sizeof( struct csids_header) ) {
*err = file_error( wth->fh, err_info );
- if( *err != 0 ) {
+ if( *err != 0 && *err != WTAP_ERR_SHORT_READ ) {
return -1;
- } else {
- return 0;
}
+ return 0;
}
if( hdr.zeropad != 0 || hdr.caplen == 0 ) {
return 0;
@@ -93,25 +92,23 @@ int csids_open(wtap *wth, int *err, gchar **err_info)
bytesRead = file_read( &tmp, 2, wth->fh );
if( bytesRead != 2 ) {
*err = file_error( wth->fh, err_info );
- if( *err != 0 ) {
+ if( *err != 0 && *err != WTAP_ERR_SHORT_READ ) {
return -1;
- } else {
- return 0;
}
+ return 0;
}
bytesRead = file_read( &iplen, 2, wth->fh );
if( bytesRead != 2 ) {
*err = file_error( wth->fh, err_info );
- if( *err != 0 ) {
+ if( *err != 0 && *err != WTAP_ERR_SHORT_READ ) {
return -1;
- } else {
- return 0;
}
+ return 0;
}
iplen = pntohs(&iplen);
if ( iplen == 0 )
- return(0);
+ return 0;
/* if iplen and hdr.caplen are equal, default to no byteswap. */
if( iplen > hdr.caplen ) {
diff --git a/wiretap/daintree-sna.c b/wiretap/daintree-sna.c
index 47d1475eee..8fdfdb71de 100644
--- a/wiretap/daintree-sna.c
+++ b/wiretap/daintree-sna.c
@@ -90,13 +90,18 @@ static gboolean daintree_sna_seek_read(wtap *wth, gint64 seek_off,
static guint daintree_sna_hex_char(guchar *str, int *err);
/* Open a file and determine if it's a Daintree file */
-int daintree_sna_open(wtap *wth, int *err _U_, gchar **err_info _U_)
+int daintree_sna_open(wtap *wth, int *err, gchar **err_info)
{
char readLine[DAINTREE_MAX_LINE_SIZE];
guint i;
/* get first line of file header */
- if (file_gets(readLine, DAINTREE_MAX_LINE_SIZE, wth->fh)==NULL) return 0;
+ if (file_gets(readLine, DAINTREE_MAX_LINE_SIZE, wth->fh)==NULL) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
/* check magic text */
i = 0;
@@ -106,7 +111,12 @@ int daintree_sna_open(wtap *wth, int *err _U_, gchar **err_info _U_)
}
/* read second header line */
- if (file_gets(readLine, DAINTREE_MAX_LINE_SIZE, wth->fh)==NULL) return 0;
+ if (file_gets(readLine, DAINTREE_MAX_LINE_SIZE, wth->fh)==NULL) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
if (readLine[0] != COMMENT_LINE) return 0; /* daintree files have a two line header */
/* set up the pointers to the handlers for this file type */
diff --git a/wiretap/dbs-etherwatch.c b/wiretap/dbs-etherwatch.c
index 6a276045ef..5a46686326 100644
--- a/wiretap/dbs-etherwatch.c
+++ b/wiretap/dbs-etherwatch.c
@@ -193,10 +193,9 @@ int dbs_etherwatch_open(wtap *wth, int *err, gchar **err_info)
{
/* Look for DBS ETHERWATCH header */
if (!dbs_etherwatch_check_file_type(wth, err, err_info)) {
- if (*err == 0)
- return 0;
- else
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
+ return 0;
}
wth->file_encap = WTAP_ENCAP_ETHERNET;
diff --git a/wiretap/dct3trace.c b/wiretap/dct3trace.c
index 9bbae29cfc..ecc466863d 100644
--- a/wiretap/dct3trace.c
+++ b/wiretap/dct3trace.c
@@ -156,49 +156,25 @@ xml_get_int(int *val, const unsigned char *str, const unsigned char *pattern)
}
-/* Look through the first part of a file to see if this is
- * a DCT3 trace file.
- *
- * Returns TRUE if it is, FALSE if it isn't or if we get an I/O error;
- * if we get an I/O error, "*err" will be set to a non-zero value
- * and "*err_info" will be set to null or an additional error string.
- */
-static gboolean dct3trace_check_file_type(wtap *wth, int *err, gchar **err_info)
+int dct3trace_open(wtap *wth, int *err, gchar **err_info)
{
char line1[64], line2[64];
- if (file_gets(line1, sizeof(line1), wth->fh) != NULL &&
- file_gets(line2, sizeof(line2), wth->fh) != NULL)
- {
- /* Don't compare line endings */
- if( strncmp(dct3trace_magic_line1, line1, strlen(dct3trace_magic_line1)) == 0 &&
- strncmp(dct3trace_magic_line2, line2, strlen(dct3trace_magic_line2)) == 0)
- {
- return TRUE;
- }
- }
- /* EOF or error. */
- else
+ /* Look for Gammu DCT3 trace header */
+ if (file_gets(line1, sizeof(line1), wth->fh) == NULL ||
+ file_gets(line2, sizeof(line2), wth->fh) == NULL)
{
- if (file_eof(wth->fh))
- *err = 0;
- else
- *err = file_error(wth->fh, err_info);
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
- return FALSE;
-}
-
-
-int dct3trace_open(wtap *wth, int *err, gchar **err_info)
-{
- /* Look for Gammu DCT3 trace header */
- if (!dct3trace_check_file_type(wth, err, err_info))
+ /* Don't compare line endings */
+ if( strncmp(dct3trace_magic_line1, line1, strlen(dct3trace_magic_line1)) != 0 ||
+ strncmp(dct3trace_magic_line2, line2, strlen(dct3trace_magic_line2)) != 0)
{
- if (*err == 0)
- return 0;
- else
- return -1;
+ return 0;
}
wth->file_encap = WTAP_ENCAP_GSM_UM;
diff --git a/wiretap/erf.c b/wiretap/erf.c
index b64c009260..d0a443c3e2 100644
--- a/wiretap/erf.c
+++ b/wiretap/erf.c
@@ -124,7 +124,8 @@ extern int erf_open(wtap *wth, int *err, gchar **err_info)
if (r == 0 ) break;
if (r != sizeof(header)) {
- if ((*err = file_error(wth->fh, err_info)) != 0) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ) {
return -1;
} else {
/* ERF header too short accept the file,
@@ -195,6 +196,8 @@ extern int erf_open(wtap *wth, int *err, gchar **err_info)
while (type & 0x80){
if (file_read(&erf_ext_header, sizeof(erf_ext_header),wth->fh) != sizeof(erf_ext_header)) {
*err = file_error(wth->fh, err_info);
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
return -1;
}
packet_size -= (guint32)sizeof(erf_ext_header);
diff --git a/wiretap/eyesdn.c b/wiretap/eyesdn.c
index dcf5e5565e..fc25ad344b 100644
--- a/wiretap/eyesdn.c
+++ b/wiretap/eyesdn.c
@@ -141,7 +141,7 @@ int eyesdn_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&magic, sizeof magic, wth->fh);
if (bytes_read != sizeof magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
diff --git a/wiretap/hcidump.c b/wiretap/hcidump.c
index 21a7d11e65..50c37c17c6 100644
--- a/wiretap/hcidump.c
+++ b/wiretap/hcidump.c
@@ -128,7 +128,9 @@ int hcidump_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&dh, DUMP_HDR_SIZE, wth->fh);
if (bytes_read != DUMP_HDR_SIZE) {
*err = file_error(wth->fh, err_info);
- return (*err != 0) ? -1 : 0;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
if ((dh.in != 0 && dh.in != 1) || dh.pad != 0
@@ -138,7 +140,9 @@ int hcidump_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&type, 1, wth->fh);
if (bytes_read != 1) {
*err = file_error(wth->fh, err_info);
- return (*err != 0) ? -1 : 0;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
if (type < 1 || type > 4)
diff --git a/wiretap/i4btrace.c b/wiretap/i4btrace.c
index 6ce3dab1e1..79336f2ec2 100644
--- a/wiretap/i4btrace.c
+++ b/wiretap/i4btrace.c
@@ -68,7 +68,7 @@ int i4btrace_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&hdr, sizeof(hdr), wth->fh);
if (bytes_read != sizeof(hdr)) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
diff --git a/wiretap/ipfix.c b/wiretap/ipfix.c
index 5120854716..9a656808bd 100644
--- a/wiretap/ipfix.c
+++ b/wiretap/ipfix.c
@@ -197,7 +197,7 @@ ipfix_open(wtap *wth, int *err, gchar **err_info)
*err_info = NULL;
return 0;
}
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1; /* real failure */
/* else it's EOF */
if (i < 1) {
diff --git a/wiretap/iptrace.c b/wiretap/iptrace.c
index a2b8ec5feb..1c46890ab6 100644
--- a/wiretap/iptrace.c
+++ b/wiretap/iptrace.c
@@ -59,11 +59,11 @@ int iptrace_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(name, 11, wth->fh);
if (bytes_read != 11) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
- name[11] = 0;
+ name[11] = '\0';
if (strcmp(name, "iptrace 1.0") == 0) {
wth->file_type = WTAP_FILE_IPTRACE_1_0;
diff --git a/wiretap/iseries.c b/wiretap/iseries.c
index eedb2ef1ff..4603647540 100644
--- a/wiretap/iseries.c
+++ b/wiretap/iseries.c
@@ -218,7 +218,7 @@ iseries_open (wtap * wth, int *err, gchar ** err_info)
if (bytes_read != sizeof magic)
{
*err = file_error (wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -327,47 +327,44 @@ iseries_check_file_type (wtap * wth, int *err, gchar **err_info, int format)
for (line = 0; line < ISERIES_HDR_LINES_TO_CHECK; line++)
{
- if (file_gets (buf, ISERIES_LINE_LENGTH, wth->fh) != NULL)
- {
- /*
- * Check that we are dealing with an ETHERNET trace
- */
- if (iseries->format == ISERIES_FORMAT_UNICODE)
- {
- iseries_UNICODE_to_ASCII ((guint8 *)buf, ISERIES_LINE_LENGTH);
- }
- ascii_strup_inplace (buf);
- num_items_scanned = sscanf (buf,
- "%*[ \n\t]OBJECT PROTOCOL%*[ .:\n\t]%8s",
- protocol);
- if (num_items_scanned == 1)
- {
- if (memcmp (protocol, "ETHERNET", 8) != 0)
- return FALSE;
- }
-
- /*
- * The header is the only place where the date part of the timestamp is held, so
- * extract it here and store for all packets to access
- */
- num_items_scanned = sscanf (buf,
- "%*[ \n\t]START DATE/TIME%*[ .:\n\t]%2d/%2d/%2d",
- &iseries->month, &iseries->day,
- &iseries->year);
- if (num_items_scanned == 3)
- {
- iseries->have_date = TRUE;
- }
- }
- else
+ if (file_gets (buf, ISERIES_LINE_LENGTH, wth->fh) == NULL)
{
/* EOF or error. */
- if (file_eof (wth->fh))
+ *err = file_error (wth->fh, err_info);
+ if (*err == WTAP_ERR_SHORT_READ)
*err = 0;
- else
- *err = file_error (wth->fh, err_info);
return FALSE;
}
+
+ /*
+ * Check that we are dealing with an ETHERNET trace
+ */
+ if (iseries->format == ISERIES_FORMAT_UNICODE)
+ {
+ iseries_UNICODE_to_ASCII ((guint8 *)buf, ISERIES_LINE_LENGTH);
+ }
+ ascii_strup_inplace (buf);
+ num_items_scanned = sscanf (buf,
+ "%*[ \n\t]OBJECT PROTOCOL%*[ .:\n\t]%8s",
+ protocol);
+ if (num_items_scanned == 1)
+ {
+ if (memcmp (protocol, "ETHERNET", 8) != 0)
+ return FALSE;
+ }
+
+ /*
+ * The header is the only place where the date part of the timestamp is held, so
+ * extract it here and store for all packets to access
+ */
+ num_items_scanned = sscanf (buf,
+ "%*[ \n\t]START DATE/TIME%*[ .:\n\t]%2d/%2d/%2d",
+ &iseries->month, &iseries->day,
+ &iseries->year);
+ if (num_items_scanned == 3)
+ {
+ iseries->have_date = TRUE;
+ }
}
*err = 0;
return TRUE;
diff --git a/wiretap/k12.c b/wiretap/k12.c
index eba4d4e25f..9c4b526f0e 100644
--- a/wiretap/k12.c
+++ b/wiretap/k12.c
@@ -696,7 +696,7 @@ int k12_open(wtap *wth, int *err, gchar **err_info) {
if ( file_read(header_buffer,0x200,wth->fh) != 0x200 ) {
K12_DBG(1,("k12_open: FILE HEADER TOO SHORT OR READ ERROR"));
*err = file_error(wth->fh, err_info);
- if (*err != 0) {
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ) {
return -1;
}
return 0;
diff --git a/wiretap/lanalyzer.c b/wiretap/lanalyzer.c
index 7798b3f3f8..f4c474ab17 100644
--- a/wiretap/lanalyzer.c
+++ b/wiretap/lanalyzer.c
@@ -290,7 +290,7 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&rec_header, LA_RecordHeaderSize, wth->fh);
if (bytes_read != LA_RecordHeaderSize) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -303,18 +303,18 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
/* Read the major and minor version numbers */
if (record_length < 2) {
- /* Not enough room for the major and minor version numbers. */
- *err = WTAP_ERR_BAD_FILE;
- *err_info = g_strdup_printf("lanalyzer: trace header record length %u < 2",
- record_length);
- return -1;
+ /*
+ * Not enough room for the major and minor version numbers.
+ * Just treat that as a "not a LANalyzer file" indication.
+ */
+ return 0;
}
bytes_read = file_read(&header_fixed, sizeof header_fixed, wth->fh);
if (bytes_read != sizeof header_fixed) {
*err = file_error(wth->fh, err_info);
- if (*err == 0)
- *err = WTAP_ERR_SHORT_READ;
- return -1;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
record_length -= sizeof header_fixed;
@@ -324,9 +324,9 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(comment, record_length, wth->fh);
if (bytes_read != record_length) {
*err = file_error(wth->fh, err_info);
- if (*err == 0)
- *err = WTAP_ERR_SHORT_READ;
- return -1;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
comment[record_length] = '\0';
wth->shb_hdr.opt_comment = comment;
@@ -349,12 +349,11 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&rec_header, LA_RecordHeaderSize, wth->fh);
if (bytes_read != LA_RecordHeaderSize) {
*err = file_error(wth->fh, err_info);
- if (*err != 0) {
- g_free(wth->priv);
- return -1;
- }
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
g_free(wth->priv);
- return 0;
+ wth->priv = NULL;
+ return -1;
}
record_type = pletohs(rec_header.record_type);
@@ -369,12 +368,11 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
wth->fh);
if (bytes_read != sizeof summary) {
*err = file_error(wth->fh, err_info);
- if (*err != 0) {
- g_free(wth->priv);
- return -1;
- }
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
g_free(wth->priv);
- return 0;
+ wth->priv = NULL;
+ return -1;
}
/* Assume that the date of the creation of the trace file
@@ -415,6 +413,7 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
break;
default:
g_free(wth->priv);
+ wth->priv = NULL;
*err = WTAP_ERR_UNSUPPORTED_ENCAP;
*err_info = g_strdup_printf("lanalyzer: board type %u unknown",
board_type);
@@ -428,6 +427,7 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
* can read this header */
if (file_seek(wth->fh, -LA_RecordHeaderSize, SEEK_CUR, err) == -1) {
g_free(wth->priv);
+ wth->priv = NULL;
return -1;
}
return 1;
@@ -435,6 +435,7 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
default:
if (file_seek(wth->fh, record_length, SEEK_CUR, err) == -1) {
g_free(wth->priv);
+ wth->priv = NULL;
return -1;
}
break;
diff --git a/wiretap/libpcap.c b/wiretap/libpcap.c
index 64df307385..018a35dbd3 100644
--- a/wiretap/libpcap.c
+++ b/wiretap/libpcap.c
@@ -95,7 +95,7 @@ int libpcap_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&magic, sizeof magic, wth->fh);
if (bytes_read != sizeof magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -165,9 +165,9 @@ int libpcap_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&hdr, sizeof hdr, wth->fh);
if (bytes_read != sizeof hdr) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
if (byte_swapped) {
diff --git a/wiretap/mime_file.c b/wiretap/mime_file.c
index 6c76ad82ba..61341ee662 100644
--- a/wiretap/mime_file.c
+++ b/wiretap/mime_file.c
@@ -146,7 +146,8 @@ mime_file_open(wtap *wth, int *err, gchar **err_info)
{
char magic_buf[128]; /* increase buffer size when needed */
int bytes_read;
- int ret;
+ gboolean found_file;
+ /* guint file_ok; */
guint i;
guint read_bytes = 0;
@@ -157,40 +158,39 @@ mime_file_open(wtap *wth, int *err, gchar **err_info)
read_bytes = (guint)MIN(read_bytes, sizeof(magic_buf));
bytes_read = file_read(magic_buf, read_bytes, wth->fh);
- if (bytes_read > 0) {
- gboolean found_file = FALSE;
- /* guint file_ok; */
-
- for (i = 0; i < N_MAGIC_TYPES; i++) {
- if ((guint) bytes_read >= magic_files[i].magic_len && !memcmp(magic_buf, magic_files[i].magic, MIN(magic_files[i].magic_len, (guint) bytes_read))) {
- if (!found_file) {
- found_file = TRUE;
- /* file_ok = i; */
- } else
- return 0; /* many files matched, bad file */
- }
+ if (bytes_read < 0) {
+ *err = file_error(wth->fh, err_info);
+ return -1;
+ }
+ if (bytes_read == 0)
+ return 0;
+
+ found_file = FALSE;
+ for (i = 0; i < N_MAGIC_TYPES; i++) {
+ if ((guint) bytes_read >= magic_files[i].magic_len && !memcmp(magic_buf, magic_files[i].magic, MIN(magic_files[i].magic_len, (guint) bytes_read))) {
+ if (!found_file) {
+ found_file = TRUE;
+ /* file_ok = i; */
+ } else
+ return 0; /* many files matched, bad file */
}
+ }
- if (!found_file)
- return 0;
+ if (!found_file)
+ return 0;
- if (file_seek(wth->fh, 0, SEEK_SET, err) == -1)
- return -1;
+ if (file_seek(wth->fh, 0, SEEK_SET, err) == -1)
+ return -1;
- wth->file_type = WTAP_FILE_MIME;
- wth->file_encap = WTAP_ENCAP_MIME;
- wth->tsprecision = WTAP_FILE_TSPREC_SEC;
- wth->subtype_read = mime_read;
- wth->subtype_seek_read = mime_seek_read;
- wth->snapshot_length = 0;
- ret = 1;
+ wth->file_type = WTAP_FILE_MIME;
+ wth->file_encap = WTAP_ENCAP_MIME;
+ wth->tsprecision = WTAP_FILE_TSPREC_SEC;
+ wth->subtype_read = mime_read;
+ wth->subtype_seek_read = mime_seek_read;
+ wth->snapshot_length = 0;
- wth->priv = g_malloc0(sizeof(mime_file_private_t));
+ wth->priv = g_malloc0(sizeof(mime_file_private_t));
- } else {
- *err = file_error(wth->fh, err_info);
- ret = -1;
- }
- return ret;
+ return 1;
}
diff --git a/wiretap/mp2t.c b/wiretap/mp2t.c
index 1ef731e49c..84964375ba 100644
--- a/wiretap/mp2t.c
+++ b/wiretap/mp2t.c
@@ -155,7 +155,9 @@ mp2t_open(wtap *wth, int *err, gchar **err_info)
if (MP2T_SIZE != bytes_read) {
*err = file_error(wth->fh, err_info);
- return (*err == 0) ? 0 : -1;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
first = -1;
@@ -175,8 +177,10 @@ mp2t_open(wtap *wth, int *err, gchar **err_info)
/* read some packets and make sure they all start with a sync byte */
do {
bytes_read = file_read(buffer, MP2T_SIZE+trailer_len, wth->fh);
- if (bytes_read < 0)
+ if (bytes_read < 0) {
+ *err = file_error(wth->fh, err_info);
return -1; /* read error */
+ }
if (bytes_read < MP2T_SIZE+trailer_len) {
if(sync_steps<2) return 0; /* wrong file type - not an mpeg2 ts file */
break; /* end of file, that's ok if we're still in sync */
diff --git a/wiretap/mpeg.c b/wiretap/mpeg.c
index 9d6640ea60..dfb8dd6846 100644
--- a/wiretap/mpeg.c
+++ b/wiretap/mpeg.c
@@ -270,7 +270,7 @@ mpeg_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(magic_buf, sizeof magic_buf, wth->fh);
if (bytes_read != (int) sizeof magic_buf) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
diff --git a/wiretap/netmon.c b/wiretap/netmon.c
index 3c388e2fa7..f48c564ff9 100644
--- a/wiretap/netmon.c
+++ b/wiretap/netmon.c
@@ -43,14 +43,17 @@
/* Capture file header, *including* magic number, is padded to 128 bytes. */
#define CAPTUREFILE_HEADER_SIZE 128
+/* Magic number size, for both 1.x and 2.x. */
+#define MAGIC_SIZE 4
+
/* Magic number in Network Monitor 1.x files. */
-static const char netmon_1_x_magic[] = {
- 'R', 'T', 'S', 'S'
+static const char netmon_1_x_magic[MAGIC_SIZE] = {
+ "RTSS"
};
/* Magic number in Network Monitor 2.x files. */
-static const char netmon_2_x_magic[] = {
- 'G', 'M', 'B', 'U'
+static const char netmon_2_x_magic[MAGIC_SIZE] = {
+ "GMBU"
};
/* Network Monitor file header (minus magic number). */
@@ -193,7 +196,7 @@ static gboolean netmon_dump_close(wtap_dumper *wdh, int *err);
int netmon_open(wtap *wth, int *err, gchar **err_info)
{
int bytes_read;
- char magic[sizeof netmon_1_x_magic];
+ char magic[MAGIC_SIZE];
struct netmon_hdr hdr;
int file_type;
struct tm tm;
@@ -209,16 +212,16 @@ int netmon_open(wtap *wth, int *err, gchar **err_info)
/* Read in the string that should be at the start of a Network
* Monitor file */
errno = WTAP_ERR_CANT_READ;
- bytes_read = file_read(magic, sizeof magic, wth->fh);
- if (bytes_read != sizeof magic) {
+ bytes_read = file_read(magic, MAGIC_SIZE, wth->fh);
+ if (bytes_read != MAGIC_SIZE) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
- if (memcmp(magic, netmon_1_x_magic, sizeof netmon_1_x_magic) != 0
- && memcmp(magic, netmon_2_x_magic, sizeof netmon_1_x_magic) != 0) {
+ if (memcmp(magic, netmon_1_x_magic, MAGIC_SIZE) != 0 &&
+ memcmp(magic, netmon_2_x_magic, MAGIC_SIZE) != 0) {
return 0;
}
@@ -227,9 +230,9 @@ int netmon_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&hdr, sizeof hdr, wth->fh);
if (bytes_read != sizeof hdr) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
switch (hdr.ver_major) {
diff --git a/wiretap/netscaler.c b/wiretap/netscaler.c
index faa79a90f6..7d5bb10b54 100644
--- a/wiretap/netscaler.c
+++ b/wiretap/netscaler.c
@@ -595,6 +595,8 @@ int nstrace_open(wtap *wth, int *err, gchar **err_info)
{
*err = file_error(wth->fh, err_info);
g_free(nstrace_buf);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
return 0;
}
diff --git a/wiretap/netscreen.c b/wiretap/netscreen.c
index a83d90f787..8609afa7fa 100644
--- a/wiretap/netscreen.c
+++ b/wiretap/netscreen.c
@@ -176,10 +176,7 @@ static gboolean netscreen_check_file_type(wtap *wth, int *err, gchar **err_info)
}
} else {
/* EOF or error. */
- if (file_eof(wth->fh))
- *err = 0;
- else
- *err = file_error(wth->fh, err_info);
+ *err = file_error(wth->fh, err_info);
return FALSE;
}
}
@@ -193,10 +190,9 @@ int netscreen_open(wtap *wth, int *err, gchar **err_info)
/* Look for a NetScreen snoop header line */
if (!netscreen_check_file_type(wth, err, err_info)) {
- if (*err == 0)
- return 0;
- else
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
+ return 0;
}
if (file_seek(wth->fh, 0L, SEEK_SET, err) == -1) /* rewind */
diff --git a/wiretap/nettl.c b/wiretap/nettl.c
index e7c9dd1955..1fa4034f24 100644
--- a/wiretap/nettl.c
+++ b/wiretap/nettl.c
@@ -205,7 +205,7 @@ int nettl_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(file_hdr.magic, MAGIC_SIZE, wth->fh);
if (bytes_read != MAGIC_SIZE) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -220,9 +220,9 @@ int nettl_open(wtap *wth, int *err, gchar **err_info)
wth->fh);
if (bytes_read != FILE_HDR_SIZE - MAGIC_SIZE) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
/* This is an nettl file */
diff --git a/wiretap/network_instruments.c b/wiretap/network_instruments.c
index 2096d95594..cd2ec51616 100644
--- a/wiretap/network_instruments.c
+++ b/wiretap/network_instruments.c
@@ -133,7 +133,7 @@ int network_instruments_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&file_header, sizeof file_header, wth->fh);
if (bytes_read != sizeof file_header) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -184,7 +184,7 @@ int network_instruments_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&private_state->time_format, sizeof private_state->time_format, wth->fh);
if (bytes_read != sizeof private_state->time_format) {
*err = file_error(wth->fh, err_info);
- if(*err == 0)
+ if (*err == 0)
*err = WTAP_ERR_SHORT_READ;
return -1;
}
@@ -206,7 +206,7 @@ int network_instruments_open(wtap *wth, int *err, gchar **err_info)
*err = WTAP_ERR_BAD_FILE;
*err_info = g_strdup_printf("Observer: bad record (offset to first packet %d < %d)",
header_offset, offset);
- return FALSE;
+ return -1;
}
seek_increment = header_offset - offset;
if (seek_increment > 0) {
@@ -218,9 +218,9 @@ int network_instruments_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&packet_header, sizeof packet_header, wth->fh);
if (bytes_read != sizeof packet_header) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
PACKET_ENTRY_HEADER_FROM_LE_IN_PLACE(packet_header);
diff --git a/wiretap/netxray.c b/wiretap/netxray.c
index 88043fc7b5..19bcc9b129 100644
--- a/wiretap/netxray.c
+++ b/wiretap/netxray.c
@@ -33,13 +33,16 @@
/* Capture file header, *including* magic number, is padded to 128 bytes. */
#define CAPTUREFILE_HEADER_SIZE 128
+/* Magic number size, in both 1.x and later files. */
+#define MAGIC_SIZE 4
+
/* Magic number in NetXRay 1.x files. */
-static const char old_netxray_magic[] = {
+static const char old_netxray_magic[MAGIC_SIZE] = {
'V', 'L', '\0', '\0'
};
/* Magic number in NetXRay 2.0 and later, and Windows Sniffer, files. */
-static const char netxray_magic[] = { /* magic header */
+static const char netxray_magic[MAGIC_SIZE] = {
'X', 'C', 'P', '\0'
};
@@ -339,7 +342,7 @@ static gboolean netxray_dump_close_2_0(wtap_dumper *wdh, int *err);
int netxray_open(wtap *wth, int *err, gchar **err_info)
{
int bytes_read;
- char magic[sizeof netxray_magic];
+ char magic[MAGIC_SIZE];
gboolean is_old;
struct netxray_hdr hdr;
guint network_type;
@@ -378,17 +381,17 @@ int netxray_open(wtap *wth, int *err, gchar **err_info)
/* Read in the string that should be at the start of a NetXRay
* file */
errno = WTAP_ERR_CANT_READ;
- bytes_read = file_read(magic, sizeof magic, wth->fh);
- if (bytes_read != sizeof magic) {
+ bytes_read = file_read(magic, MAGIC_SIZE, wth->fh);
+ if (bytes_read != MAGIC_SIZE) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
- if (memcmp(magic, netxray_magic, sizeof magic) == 0) {
+ if (memcmp(magic, netxray_magic, MAGIC_SIZE) == 0) {
is_old = FALSE;
- } else if (memcmp(magic, old_netxray_magic, sizeof magic) == 0) {
+ } else if (memcmp(magic, old_netxray_magic, MAGIC_SIZE) == 0) {
is_old = TRUE;
} else {
return 0;
@@ -399,9 +402,9 @@ int netxray_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&hdr, sizeof hdr, wth->fh);
if (bytes_read != sizeof hdr) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
if (is_old) {
diff --git a/wiretap/ngsniffer.c b/wiretap/ngsniffer.c
index cf92b54dff..b0145565b2 100644
--- a/wiretap/ngsniffer.c
+++ b/wiretap/ngsniffer.c
@@ -589,7 +589,7 @@ ngsniffer_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(magic, sizeof magic, wth->fh);
if (bytes_read != sizeof magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -606,16 +606,16 @@ ngsniffer_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(record_type, 2, wth->fh);
if (bytes_read != 2) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
bytes_read = file_read(record_length, 4, wth->fh);
if (bytes_read != 4) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
type = pletohs(record_type);
@@ -630,9 +630,9 @@ ngsniffer_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&version, sizeof version, wth->fh);
if (bytes_read != sizeof version) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
/* Check the data link type. */
@@ -654,7 +654,6 @@ ngsniffer_open(wtap *wth, int *err, gchar **err_info)
/* compressed or uncompressed Sniffer file? */
if (version.format != 1) {
wth->file_type = WTAP_FILE_NGSNIFFER_COMPRESSED;
-
} else {
wth->file_type = WTAP_FILE_NGSNIFFER_UNCOMPRESSED;
}
diff --git a/wiretap/packetlogger.c b/wiretap/packetlogger.c
index 07ba70eed9..a4aef3f717 100644
--- a/wiretap/packetlogger.c
+++ b/wiretap/packetlogger.c
@@ -61,11 +61,18 @@ int packetlogger_open(wtap *wth, int *err, gchar **err_info)
packetlogger_header_t pl_hdr;
guint8 type;
- if(!packetlogger_read_header(&pl_hdr, wth->fh, err, err_info))
- return -1;
+ if(!packetlogger_read_header(&pl_hdr, wth->fh, err, err_info)) {
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
- if (file_read(&type, 1, wth->fh) <= 0)
- return -1;
+ if (file_read(&type, 1, wth->fh) <= 0) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
/* Verify this file belongs to us */
if (!((8 <= pl_hdr.len) && (pl_hdr.len < 65536) &&
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c
index 179169bede..50842a1b5a 100644
--- a/wiretap/pcapng.c
+++ b/wiretap/pcapng.c
@@ -2053,7 +2053,7 @@ pcapng_open(wtap *wth, int *err, gchar **err_info)
if (bytes_read <= 0) {
pcapng_debug0("pcapng_open: couldn't read first SHB");
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
diff --git a/wiretap/peekclassic.c b/wiretap/peekclassic.c
index 028947af73..e8b890e020 100644
--- a/wiretap/peekclassic.c
+++ b/wiretap/peekclassic.c
@@ -155,6 +155,7 @@ int
peekclassic_open(wtap *wth, int *err, gchar **err_info)
{
peekclassic_header_t ep_hdr;
+ int bytes_read;
struct timeval reference_time;
int file_encap;
peekclassic_t *peekclassic;
@@ -168,8 +169,14 @@ peekclassic_open(wtap *wth, int *err, gchar **err_info)
* and we may have to add more checks at some point.
*/
g_assert(sizeof(ep_hdr.master) == PEEKCLASSIC_MASTER_HDR_SIZE);
- wtap_file_read_unknown_bytes(
- &ep_hdr.master, sizeof(ep_hdr.master), wth->fh, err, err_info);
+ bytes_read = file_read(&ep_hdr.master, (int)sizeof(ep_hdr.master),
+ wth->fh);
+ if (bytes_read != sizeof(ep_hdr.master)) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
/*
* It appears that EtherHelp (a free application from WildPackets
@@ -194,9 +201,14 @@ peekclassic_open(wtap *wth, int *err, gchar **err_info)
/* get the secondary header */
g_assert(sizeof(ep_hdr.secondary.v567) ==
PEEKCLASSIC_V567_HDR_SIZE);
- wtap_file_read_unknown_bytes(
- &ep_hdr.secondary.v567,
- sizeof(ep_hdr.secondary.v567), wth->fh, err, err_info);
+ bytes_read = file_read(&ep_hdr.secondary.v567,
+ (int)sizeof(ep_hdr.secondary.v567), wth->fh);
+ if (bytes_read != sizeof(ep_hdr.secondary.v567)) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
if ((0 != ep_hdr.secondary.v567.reserved[0]) ||
(0 != ep_hdr.secondary.v567.reserved[1]) ||
diff --git a/wiretap/peektagged.c b/wiretap/peektagged.c
index ebc7eae53a..98a3cafacb 100644
--- a/wiretap/peektagged.c
+++ b/wiretap/peektagged.c
@@ -187,6 +187,7 @@ static int wtap_file_read_number (wtap *wth, guint32 *num, int *err,
int peektagged_open(wtap *wth, int *err, gchar **err_info)
{
peektagged_section_header_t ap_hdr;
+ int bytes_read;
int ret;
guint32 fileVersion;
guint32 mediaType;
@@ -201,8 +202,13 @@ int peektagged_open(wtap *wth, int *err, gchar **err_info)
#define NUM_PEEKTAGGED_ENCAPS (sizeof peektagged_encap / sizeof peektagged_encap[0])
peektagged_t *peektagged;
- wtap_file_read_unknown_bytes(&ap_hdr, sizeof(ap_hdr), wth->fh, err,
- err_info);
+ bytes_read = file_read(&ap_hdr, (int)sizeof(ap_hdr), wth->fh);
+ if (bytes_read != (int)sizeof(ap_hdr)) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
if (memcmp (ap_hdr.section_id, "\177ver", sizeof(ap_hdr.section_id)) != 0)
return 0; /* doesn't begin with a "\177ver" section */
diff --git a/wiretap/pppdump.c b/wiretap/pppdump.c
index 0fc2e212c6..239f1a8e34 100644
--- a/wiretap/pppdump.c
+++ b/wiretap/pppdump.c
@@ -249,6 +249,7 @@ int
pppdump_open(wtap *wth, int *err, gchar **err_info)
{
guint8 buffer[6]; /* Looking for: 0x07 t3 t2 t1 t0 ID */
+ int bytes_read;
pppdump_t *state;
/* There is no file header, only packet records. Fortunately for us,
@@ -259,8 +260,13 @@ pppdump_open(wtap *wth, int *err, gchar **err_info)
* representing the timestamp.
*/
- wtap_file_read_unknown_bytes(buffer, sizeof(buffer), wth->fh, err,
- err_info);
+ bytes_read = file_read(buffer, sizeof(buffer), wth->fh);
+ if (bytes_read != (int) sizeof(buffer)) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
+ }
if (buffer[0] == PPPD_RESET_TIME &&
(buffer[5] == PPPD_SENT_DATA ||
diff --git a/wiretap/radcom.c b/wiretap/radcom.c
index 0821498a2a..83d5f38a83 100644
--- a/wiretap/radcom.c
+++ b/wiretap/radcom.c
@@ -111,7 +111,7 @@ int radcom_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(r_magic, 8, wth->fh);
if (bytes_read != 8) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -132,7 +132,7 @@ int radcom_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(t_magic, 11, wth->fh);
if (bytes_read != 11) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -144,7 +144,7 @@ int radcom_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(t_magic, 11, wth->fh);
if (bytes_read != 11) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -157,7 +157,7 @@ int radcom_open(wtap *wth, int *err, gchar **err_info)
wth->fh);
if (bytes_read != sizeof(struct frame_date)) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
diff --git a/wiretap/snoop.c b/wiretap/snoop.c
index c84d05158b..a89e98645e 100644
--- a/wiretap/snoop.c
+++ b/wiretap/snoop.c
@@ -264,7 +264,7 @@ int snoop_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(magic, sizeof magic, wth->fh);
if (bytes_read != sizeof magic) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -278,9 +278,9 @@ int snoop_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&hdr, sizeof hdr, wth->fh);
if (bytes_read != sizeof hdr) {
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
/*
@@ -339,14 +339,9 @@ int snoop_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&rec_hdr, sizeof rec_hdr, wth->fh);
if (bytes_read != sizeof rec_hdr) {
*err = file_error(wth->fh, err_info);
- if (*err == 0 && bytes_read != 0)
+ if (*err == 0)
*err = WTAP_ERR_SHORT_READ;
- if (*err != 0) {
- /*
- * A real-live error.
- */
- return -1;
- }
+ return -1;
/*
* The file ends after the record header, which means this
diff --git a/wiretap/tnef.c b/wiretap/tnef.c
index 591a2f50dc..3afd1d49d6 100644
--- a/wiretap/tnef.c
+++ b/wiretap/tnef.c
@@ -109,7 +109,9 @@ int tnef_open(wtap *wth, int *err, gchar **err_info)
bytes_read = file_read(&magic, sizeof magic, wth->fh);
if (bytes_read != sizeof magic) {
*err = file_error(wth->fh, err_info);
- return (*err != 0) ? -1 : 0;
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return -1;
+ return 0;
}
if (htolel(magic) != TNEF_SIGNATURE)
diff --git a/wiretap/toshiba.c b/wiretap/toshiba.c
index 3b79a07576..dea3d7c6d6 100644
--- a/wiretap/toshiba.c
+++ b/wiretap/toshiba.c
@@ -174,34 +174,29 @@ static gboolean toshiba_check_file_type(wtap *wth, int *err, gchar **err_info)
buf[TOSHIBA_LINE_LENGTH-1] = 0;
for (line = 0; line < TOSHIBA_HEADER_LINES_TO_CHECK; line++) {
- if (file_gets(buf, TOSHIBA_LINE_LENGTH, wth->fh) != NULL) {
+ if (file_gets(buf, TOSHIBA_LINE_LENGTH, wth->fh) == NULL) {
+ /* EOF or error. */
+ *err = file_error(wth->fh, err_info);
+ return FALSE;
+ }
- reclen = (guint) strlen(buf);
- if (reclen < TOSHIBA_HDR_MAGIC_SIZE) {
- continue;
- }
+ reclen = (guint) strlen(buf);
+ if (reclen < TOSHIBA_HDR_MAGIC_SIZE) {
+ continue;
+ }
- level = 0;
- for (i = 0; i < reclen; i++) {
- byte = buf[i];
- if (byte == toshiba_hdr_magic[level]) {
- level++;
- if (level >= TOSHIBA_HDR_MAGIC_SIZE) {
- return TRUE;
- }
- }
- else {
- level = 0;
+ level = 0;
+ for (i = 0; i < reclen; i++) {
+ byte = buf[i];
+ if (byte == toshiba_hdr_magic[level]) {
+ level++;
+ if (level >= TOSHIBA_HDR_MAGIC_SIZE) {
+ return TRUE;
}
}
- }
- else {
- /* EOF or error. */
- if (file_eof(wth->fh))
- *err = 0;
- else
- *err = file_error(wth->fh, err_info);
- return FALSE;
+ else {
+ level = 0;
+ }
}
}
*err = 0;
@@ -213,10 +208,9 @@ int toshiba_open(wtap *wth, int *err, gchar **err_info)
{
/* Look for Toshiba header */
if (!toshiba_check_file_type(wth, err, err_info)) {
- if (*err == 0)
- return 0;
- else
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
+ return 0;
}
wth->file_encap = WTAP_ENCAP_PER_PACKET;
diff --git a/wiretap/visual.c b/wiretap/visual.c
index 952894416d..1c35a35ad0 100644
--- a/wiretap/visual.c
+++ b/wiretap/visual.c
@@ -188,7 +188,7 @@ int visual_open(wtap *wth, int *err, gchar **err_info)
if (bytes_read != sizeof magic)
{
*err = file_error(wth->fh, err_info);
- if (*err != 0)
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
return 0;
}
@@ -203,9 +203,9 @@ int visual_open(wtap *wth, int *err, gchar **err_info)
if (bytes_read != sizeof vfile_hdr)
{
*err = file_error(wth->fh, err_info);
- if (*err != 0)
- return -1;
- return 0;
+ if (*err == 0)
+ *err = WTAP_ERR_SHORT_READ;
+ return -1;
}
/* Verify the file version is known */
diff --git a/wiretap/vms.c b/wiretap/vms.c
index cbbc03fe13..a6f4899cbb 100644
--- a/wiretap/vms.c
+++ b/wiretap/vms.c
@@ -258,10 +258,9 @@ int vms_open(wtap *wth, int *err, gchar **err_info)
{
/* Look for VMS header */
if (!vms_check_file_type(wth, err, err_info)) {
- if (*err == 0)
- return 0;
- else
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
return -1;
+ return 0;
}
wth->file_encap = WTAP_ENCAP_RAW_IP;
diff --git a/wiretap/vwr.c b/wiretap/vwr.c
index 573ff5f0bf..f932a5bbdf 100644
--- a/wiretap/vwr.c
+++ b/wiretap/vwr.c
@@ -899,9 +899,9 @@ static int vwr_get_fpga_version(wtap *wth, int *err, gchar **err_info)
/* if we don't get it all, assume this isn't a vwr file */
if (file_read(rec, rec_size, wth->fh) != rec_size) {
*err = file_error(wth->fh, err_info);
- if (*err == 0)
- return(UNKNOWN_FPGA); /* short read - not a vwr file */
- return(-1);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return(-1);
+ return(UNKNOWN_FPGA); /* short read - not a vwr file */
}
@@ -983,9 +983,9 @@ static int vwr_get_fpga_version(wtap *wth, int *err, gchar **err_info)
}
*err = file_error(wth->fh, err_info);
- if (*err == 0)
- return(UNKNOWN_FPGA); /* short read - not a vwr file */
- return(-1);
+ if (*err != 0 && *err != WTAP_ERR_SHORT_READ)
+ return(-1);
+ return(UNKNOWN_FPGA); /* short read - not a vwr file */
}
/* copy the actual packet data from the capture file into the target data block */