aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/riff.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-11-25 12:38:58 -0500
committerJustin Ruggles <justin.ruggles@gmail.com>2012-11-26 19:08:51 -0500
commit3c370f5abc55739a261534b9f9bdc739cedbbbb9 (patch)
treeb9bda27b25ff3bf42ff926984ab6bfd5941d86bd /libavformat/riff.c
parentd89f2fa970ed398a77e88da027563548d27acd59 (diff)
downloadffmpeg-3c370f5abc55739a261534b9f9bdc739cedbbbb9.tar.gz
riff: only warn on a bad INFO chunk code size instead of failing
fixes Bug 392
Diffstat (limited to 'libavformat/riff.c')
-rw-r--r--libavformat/riff.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 11e2a6438f..731309201a 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -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;