diff options
Diffstat (limited to 'wiretap/packetlogger.c')
-rw-r--r-- | wiretap/packetlogger.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/wiretap/packetlogger.c b/wiretap/packetlogger.c index e589db76dd..20b175a89a 100644 --- a/wiretap/packetlogger.c +++ b/wiretap/packetlogger.c @@ -93,7 +93,7 @@ int packetlogger_open(wtap *wth, int *err, gchar **err_info _U_) } static gboolean -packetlogger_read(wtap *wth, int *err, gchar **err_info _U_, gint64 *data_offset) +packetlogger_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset) { packetlogger_header_t pl_hdr; guint bytes_read; @@ -103,6 +103,12 @@ packetlogger_read(wtap *wth, int *err, gchar **err_info _U_, gint64 *data_offset if(!packetlogger_read_header(&pl_hdr, wth->fh, err)) return FALSE; + if (pl_hdr.len < 8) { + *err_info = g_strdup_printf("packetlogger: record length %u is too small", pl_hdr.len); + *err = WTAP_ERR_BAD_RECORD; + return FALSE; + } + buffer_assure_space(wth->frame_buffer, pl_hdr.len - 8); bytes_read = file_read(buffer_start_ptr(wth->frame_buffer), 1, pl_hdr.len - 8, |