summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wiretap/commview.c46
-rw-r--r--wiretap/lanalyzer.c29
-rw-r--r--wiretap/ngsniffer.c13
-rw-r--r--wiretap/packetlogger.c16
4 files changed, 53 insertions, 51 deletions
diff --git a/wiretap/commview.c b/wiretap/commview.c
index 30fe21b768..2cd74a520a 100644
--- a/wiretap/commview.c
+++ b/wiretap/commview.c
@@ -243,26 +243,24 @@ static gboolean
commview_read_header(commview_header_t *cv_hdr, FILE_T fh, int *err,
gchar **err_info)
{
- int bytes_read = 0;
-
- bytes_read += file_read(&cv_hdr->data_len, 2, fh);
- bytes_read += file_read(&cv_hdr->source_data_len, 2, fh);
- bytes_read += file_read(&cv_hdr->version, 1, fh);
- bytes_read += file_read(&cv_hdr->year, 2, fh);
- bytes_read += file_read(&cv_hdr->month, 1, fh);
- bytes_read += file_read(&cv_hdr->day, 1, fh);
- bytes_read += file_read(&cv_hdr->hours, 1, fh);
- bytes_read += file_read(&cv_hdr->minutes, 1, fh);
- bytes_read += file_read(&cv_hdr->seconds, 1, fh);
- bytes_read += file_read(&cv_hdr->usecs, 4, fh);
- bytes_read += file_read(&cv_hdr->flags, 1, fh);
- bytes_read += file_read(&cv_hdr->signal_level_percent, 1, fh);
- bytes_read += file_read(&cv_hdr->rate, 1, fh);
- bytes_read += file_read(&cv_hdr->band, 1, fh);
- bytes_read += file_read(&cv_hdr->channel, 1, fh);
- bytes_read += file_read(&cv_hdr->direction, 1, fh);
- bytes_read += file_read(&cv_hdr->signal_level_dbm, 1, fh);
- bytes_read += file_read(&cv_hdr->noise_level, 1, fh);
+ wtap_file_read_expected_bytes(&cv_hdr->data_len, 2, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->source_data_len, 2, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->version, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->year, 2, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->month, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->day, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->hours, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->minutes, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->seconds, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->usecs, 4, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->flags, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->signal_level_percent, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->rate, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->band, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->channel, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->direction, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->signal_level_dbm, 1, fh, err, err_info);
+ wtap_file_read_expected_bytes(&cv_hdr->noise_level, 1, fh, err, err_info);
/* Convert multi-byte values from little endian to host endian format */
cv_hdr->data_len = GUINT16_FROM_LE(cv_hdr->data_len);
@@ -270,14 +268,6 @@ commview_read_header(commview_header_t *cv_hdr, FILE_T fh, int *err,
cv_hdr->year = GUINT16_FROM_LE(cv_hdr->year);
cv_hdr->usecs = GUINT32_FROM_LE(cv_hdr->usecs);
- if(bytes_read < COMMVIEW_HEADER_SIZE) {
- *err = file_error(fh, err_info);
- if(*err == 0 && bytes_read > 0)
- *err = WTAP_ERR_SHORT_READ;
-
- return FALSE;
- }
-
return TRUE;
}
diff --git a/wiretap/lanalyzer.c b/wiretap/lanalyzer.c
index 7c6279e3cb..f08e2a5767 100644
--- a/wiretap/lanalyzer.c
+++ b/wiretap/lanalyzer.c
@@ -143,14 +143,21 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
errno = WTAP_ERR_CANT_READ;
bytes_read = file_read(LE_record_type, 2, wth->fh);
- bytes_read += file_read(LE_record_length, 2, wth->fh);
- if (bytes_read != 4) {
+ if (bytes_read != 2) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0)
+ return -1;
+ return 0;
+ }
+ wth->data_offset += 2;
+ bytes_read = file_read(LE_record_length, 2, wth->fh);
+ if (bytes_read != 2) {
*err = file_error(wth->fh, err_info);
if (*err != 0)
return -1;
return 0;
}
- wth->data_offset += 4;
+ wth->data_offset += 2;
record_type = pletohs(LE_record_type);
record_length = pletohs(LE_record_length); /* make sure to do this for while() loop */
@@ -178,8 +185,18 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
wth->data_offset += record_length;
errno = WTAP_ERR_CANT_READ;
bytes_read = file_read(LE_record_type, 2, wth->fh);
- bytes_read += file_read(LE_record_length, 2, wth->fh);
- if (bytes_read != 4) {
+ if (bytes_read != 2) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0) {
+ g_free(wth->priv);
+ return -1;
+ }
+ g_free(wth->priv);
+ return 0;
+ }
+ wth->data_offset += 2;
+ bytes_read = file_read(LE_record_length, 2, wth->fh);
+ if (bytes_read != 2) {
*err = file_error(wth->fh, err_info);
if (*err != 0) {
g_free(wth->priv);
@@ -188,7 +205,7 @@ int lanalyzer_open(wtap *wth, int *err, gchar **err_info)
g_free(wth->priv);
return 0;
}
- wth->data_offset += 4;
+ wth->data_offset += 2;
record_type = pletohs(LE_record_type);
record_length = pletohs(LE_record_length);
diff --git a/wiretap/ngsniffer.c b/wiretap/ngsniffer.c
index f417ebf08a..995de9b7df 100644
--- a/wiretap/ngsniffer.c
+++ b/wiretap/ngsniffer.c
@@ -579,14 +579,21 @@ ngsniffer_open(wtap *wth, int *err, gchar **err_info)
*/
errno = WTAP_ERR_CANT_READ;
bytes_read = file_read(record_type, 2, wth->fh);
- bytes_read += file_read(record_length, 4, wth->fh);
- if (bytes_read != 6) {
+ if (bytes_read != 2) {
+ *err = file_error(wth->fh, err_info);
+ if (*err != 0)
+ return -1;
+ return 0;
+ }
+ wth->data_offset += 2;
+ 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;
}
- wth->data_offset += 6;
+ wth->data_offset += 4;
type = pletohs(record_type);
diff --git a/wiretap/packetlogger.c b/wiretap/packetlogger.c
index 3cb4b92945..5d00d492d7 100644
--- a/wiretap/packetlogger.c
+++ b/wiretap/packetlogger.c
@@ -48,8 +48,6 @@ typedef struct packetlogger_header {
guint64 ts;
} packetlogger_header_t;
-#define PACKETLOGGER_HEADER_SIZE 12
-
static gboolean packetlogger_read(wtap *wth, int *err, gchar **err_info,
gint64 *data_offset);
static gboolean packetlogger_seek_read(wtap *wth, gint64 seek_off,
@@ -172,22 +170,12 @@ static gboolean
packetlogger_read_header(packetlogger_header_t *pl_hdr, FILE_T fh, int *err,
gchar **err_info)
{
- guint bytes_read = 0;
-
- bytes_read += file_read(&pl_hdr->len, 4, fh);
- bytes_read += file_read(&pl_hdr->ts, 8, fh);
+ wtap_file_read_expected_bytes(&pl_hdr->len, 4, fh, err, err_info);
+ wtap_file_read_expected_bytes(&pl_hdr->ts, 8, fh, err, err_info);
/* Convert multi-byte values from big endian to host endian */
pl_hdr->len = GUINT32_FROM_BE(pl_hdr->len);
pl_hdr->ts = GUINT64_FROM_BE(pl_hdr->ts);
- if(bytes_read < PACKETLOGGER_HEADER_SIZE) {
- *err = file_error(fh, err_info);
- if(*err == 0 && bytes_read > 0)
- *err = WTAP_ERR_SHORT_READ;
-
- return FALSE;
- }
-
return TRUE;
}