diff options
author | Michael Tüxen <tuexen@fh-muenster.de> | 2009-06-22 11:45:28 +0000 |
---|---|---|
committer | Michael Tüxen <tuexen@fh-muenster.de> | 2009-06-22 11:45:28 +0000 |
commit | 2f2c22c0c013d637d35c0a802004a45affad8167 (patch) | |
tree | bbac427f1b73756ee187632a5eb13a1bf0c3fae6 /wiretap | |
parent | 6270137b07f84d1ef5a45c8446fbae52149449fd (diff) |
Add protection code to avoid crashed when .erf files
are wrongly identified as packetlogger ones.
Will be scheduled for 1.2.1.
svn path=/trunk/; revision=28808
Diffstat (limited to 'wiretap')
-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, |