riff: only warn on a bad INFO chunk code size instead of failing
authorJustin Ruggles <justin.ruggles@gmail.com>
Sun, 25 Nov 2012 17:38:58 +0000 (12:38 -0500)
committerJustin Ruggles <justin.ruggles@gmail.com>
Tue, 27 Nov 2012 00:08:51 +0000 (19:08 -0500)
fixes Bug 392

libavformat/riff.c

index 11e2a6438f0a9e5e7d4d0541a24fed57eaba5779..731309201a1c165acb6e2f62246e2b72b4f8a1bc 100644 (file)
@@ -726,9 +726,10 @@ int ff_read_riff_info(AVFormatContext *s, int64_t size)
 
         chunk_code = avio_rl32(pb);
         chunk_size = avio_rl32(pb);
+
         if (chunk_size > end || end - chunk_size < cur || chunk_size == UINT_MAX) {
-            av_log(s, AV_LOG_ERROR, "too big INFO subchunk\n");
-            return AVERROR_INVALIDDATA;
+            av_log(s, AV_LOG_WARNING, "too big INFO subchunk\n");
+            break;
         }
 
         chunk_size += (chunk_size & 1);
@@ -743,8 +744,8 @@ int ff_read_riff_info(AVFormatContext *s, int64_t size)
 
         if (avio_read(pb, value, chunk_size) != chunk_size) {
             av_free(value);
-            av_log(s, AV_LOG_ERROR, "premature end of file while reading INFO tag\n");
-            return AVERROR_INVALIDDATA;
+            av_log(s, AV_LOG_WARNING, "premature end of file while reading INFO tag\n");
+            break;
         }
 
         value[chunk_size] = 0;