diff --git a/include/hexagram/pcapng.h b/include/hexagram/pcapng.h index 4bec588..354a9a3 100644 --- a/include/hexagram/pcapng.h +++ b/include/hexagram/pcapng.h @@ -7,7 +7,8 @@ enum { HEXAGRAM_PCAPNG_ERROR_OK = 0, HEXAGRAM_PCAPNG_ERROR_IO = 1, HEXAGRAM_PCAPNG_ERROR_TRUNCATED = 2, - HEXAGRAM_PCAPNG_ERROR_HANDLER = 3 + HEXAGRAM_PCAPNG_ERROR_FORMAT = 3, + HEXAGRAM_PCAPNG_ERROR_HANDLER = 4 } hexagram_pcapng_error; typedef struct _hexagram_pcapng_header { diff --git a/src/pcapng.c b/src/pcapng.c index 4e628a8..505b42c 100644 --- a/src/pcapng.c +++ b/src/pcapng.c @@ -32,7 +32,7 @@ ssize_t hexagram_pcapng_stream_read(fd, handler, error) total += readlen; - if (handler(fd, header.type, header.length) < 0) { + if (handler(fd, header.type, header.length - sizeof(header) - sizeof(footer)) < 0) { *error = HEXAGRAM_PCAPNG_ERROR_HANDLER; goto error_io; @@ -49,6 +49,12 @@ ssize_t hexagram_pcapng_stream_read(fd, handler, error) goto error_io; } + + if (footer.length != header.length) { + *error = HEXAGRAM_PCAPNG_ERROR_FORMAT; + + goto error_io; + } } *error = HEXAGRAM_PCAPNG_ERROR_OK;