[FFmpeg-cvslog] nutdec: stop skipping bytes at EOF
ffmpeg | branch: release/2.6 | Andreas Cadhalpun andreas.cadhal...@googlemail.com | Wed May 20 00:31:24 2015 +0200| [9c3d306ba43747e17d93504b08127b94fcb31f73] | committer: Michael Niedermayer nutdec: stop skipping bytes at EOF This can unnecessarily waste a lot of time. Reviewed-by: Michael Niedermayer michae...@gmx.at Signed-off-by: Andreas Cadhalpun andreas.cadhal...@googlemail.com (cherry picked from commit fa7dec8cb00d2d0dd96ff9863ccda38428610a21) Signed-off-by: Michael Niedermayer michae...@gmx.at http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9c3d306ba43747e17d93504b08127b94fcb31f73 --- libavformat/nutdec.c | 21 ++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index eb86c2d..cb0764a 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -47,6 +47,8 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen) while (len maxlen) { avio_r8(bc); len--; +if (bc-eof_reached) +len = maxlen; } if (maxlen) @@ -213,8 +215,11 @@ static int skip_reserved(AVIOContext *bc, int64_t pos) avio_seek(bc, pos, SEEK_CUR); return AVERROR_INVALIDDATA; } else { -while (pos--) +while (pos--) { +if (bc-eof_reached) +return AVERROR_INVALIDDATA; avio_r8(bc); +} return 0; } } @@ -293,8 +298,13 @@ static int decode_main_header(NUTContext *nut) if (tmp_fields 7) tmp_head_idx = ffio_read_varlen(bc); -while (tmp_fields-- 8) +while (tmp_fields-- 8) { +if (bc-eof_reached) { +av_log(s, AV_LOG_ERROR, reached EOF while decoding main header\n); +return AVERROR_INVALIDDATA; +} ffio_read_varlen(bc); +} if (count = 0 || count 256 - (i = 'N') - i) { av_log(s, AV_LOG_ERROR, illegal count %d at %d\n, count, i); @@ -985,8 +995,13 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, *header_idx = ffio_read_varlen(bc); if (flags FLAG_RESERVED) reserved_count = ffio_read_varlen(bc); -for (i = 0; i reserved_count; i++) +for (i = 0; i reserved_count; i++) { +if (bc-eof_reached) { +av_log(s, AV_LOG_ERROR, reached EOF while decoding frame header\n); +return AVERROR_INVALIDDATA; +} ffio_read_varlen(bc); +} if (*header_idx = (unsigned)nut-header_count) { av_log(s, AV_LOG_ERROR, header_idx invalid\n); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] nutdec: stop skipping bytes at EOF
ffmpeg | branch: release/2.4 | Andreas Cadhalpun andreas.cadhal...@googlemail.com | Wed May 20 00:31:24 2015 +0200| [b947ff898596558c64e4b72657860ed2b57f58fd] | committer: Michael Niedermayer nutdec: stop skipping bytes at EOF This can unnecessarily waste a lot of time. Reviewed-by: Michael Niedermayer michae...@gmx.at Signed-off-by: Andreas Cadhalpun andreas.cadhal...@googlemail.com (cherry picked from commit fa7dec8cb00d2d0dd96ff9863ccda38428610a21) Signed-off-by: Michael Niedermayer michae...@gmx.at http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b947ff898596558c64e4b72657860ed2b57f58fd --- libavformat/nutdec.c | 21 ++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 3fdbd72..59d88db 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -47,6 +47,8 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen) while (len maxlen) { avio_r8(bc); len--; +if (bc-eof_reached) +len = maxlen; } if (maxlen) @@ -213,8 +215,11 @@ static int skip_reserved(AVIOContext *bc, int64_t pos) avio_seek(bc, pos, SEEK_CUR); return AVERROR_INVALIDDATA; } else { -while (pos--) +while (pos--) { +if (bc-eof_reached) +return AVERROR_INVALIDDATA; avio_r8(bc); +} return 0; } } @@ -293,8 +298,13 @@ static int decode_main_header(NUTContext *nut) if (tmp_fields 7) tmp_head_idx = ffio_read_varlen(bc); -while (tmp_fields-- 8) +while (tmp_fields-- 8) { +if (bc-eof_reached) { +av_log(s, AV_LOG_ERROR, reached EOF while decoding main header\n); +return AVERROR_INVALIDDATA; +} ffio_read_varlen(bc); +} if (count == 0 || i + count 256) { av_log(s, AV_LOG_ERROR, illegal count %d at %d\n, count, i); @@ -995,8 +1005,13 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, *header_idx = ffio_read_varlen(bc); if (flags FLAG_RESERVED) reserved_count = ffio_read_varlen(bc); -for (i = 0; i reserved_count; i++) +for (i = 0; i reserved_count; i++) { +if (bc-eof_reached) { +av_log(s, AV_LOG_ERROR, reached EOF while decoding frame header\n); +return AVERROR_INVALIDDATA; +} ffio_read_varlen(bc); +} if (*header_idx = (unsigned)nut-header_count) { av_log(s, AV_LOG_ERROR, header_idx invalid\n); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] nutdec: stop skipping bytes at EOF
ffmpeg | branch: master | Andreas Cadhalpun andreas.cadhal...@googlemail.com | Wed May 20 00:31:24 2015 +0200| [fa7dec8cb00d2d0dd96ff9863ccda38428610a21] | committer: Andreas Cadhalpun nutdec: stop skipping bytes at EOF This can unnecessarily waste a lot of time. Reviewed-by: Michael Niedermayer michae...@gmx.at Signed-off-by: Andreas Cadhalpun andreas.cadhal...@googlemail.com http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fa7dec8cb00d2d0dd96ff9863ccda38428610a21 --- libavformat/nutdec.c | 21 ++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 6742ee9..8994a91 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -47,6 +47,8 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen) while (len maxlen) { avio_r8(bc); len--; +if (bc-eof_reached) +len = maxlen; } if (maxlen) @@ -213,8 +215,11 @@ static int skip_reserved(AVIOContext *bc, int64_t pos) avio_seek(bc, pos, SEEK_CUR); return AVERROR_INVALIDDATA; } else { -while (pos--) +while (pos--) { +if (bc-eof_reached) +return AVERROR_INVALIDDATA; avio_r8(bc); +} return 0; } } @@ -293,8 +298,13 @@ static int decode_main_header(NUTContext *nut) if (tmp_fields 7) tmp_head_idx = ffio_read_varlen(bc); -while (tmp_fields-- 8) +while (tmp_fields-- 8) { +if (bc-eof_reached) { +av_log(s, AV_LOG_ERROR, reached EOF while decoding main header\n); +return AVERROR_INVALIDDATA; +} ffio_read_varlen(bc); +} if (count = 0 || count 256 - (i = 'N') - i) { av_log(s, AV_LOG_ERROR, illegal count %d at %d\n, count, i); @@ -992,8 +1002,13 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, *header_idx = ffio_read_varlen(bc); if (flags FLAG_RESERVED) reserved_count = ffio_read_varlen(bc); -for (i = 0; i reserved_count; i++) +for (i = 0; i reserved_count; i++) { +if (bc-eof_reached) { +av_log(s, AV_LOG_ERROR, reached EOF while decoding frame header\n); +return AVERROR_INVALIDDATA; +} ffio_read_varlen(bc); +} if (*header_idx = (unsigned)nut-header_count) { av_log(s, AV_LOG_ERROR, header_idx invalid\n); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog