[FFmpeg-devel] [PATCH 2/3] nutdec: stop skipping bytes at EOF

Andreas Cadhalpun andreas.cadhalpun at googlemail.com
Wed May 20 00:49:55 CEST 2015


This can unnecessarily waste a lot of time.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
---
 libavformat/nutdec.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index a75587f..e979ee6 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)
@@ -211,7 +213,7 @@ static int skip_reserved(AVIOContext *bc, int64_t pos)
         avio_seek(bc, pos, SEEK_CUR);
         return AVERROR_INVALIDDATA;
     } else {
-        while (pos--)
+        while (pos-- && !bc->eof_reached)
             avio_r8(bc);
         return 0;
     }
@@ -291,7 +293,7 @@ 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 && !bc->eof_reached)
             ffio_read_varlen(bc);
 
         if (count <= 0 || count > 256 - (i <= 'N') - i) {
@@ -990,7 +992,7 @@ 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 && !bc->eof_reached; i++)
         ffio_read_varlen(bc);
 
     if (*header_idx >= (unsigned)nut->header_count) {
-- 
2.1.4


More information about the ffmpeg-devel mailing list