aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-10-18 04:58:20 +0200
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2012-12-10 00:46:15 +0100
commitc6850d38625b731cdf9186f79bc38417736a7572 (patch)
tree4f34d6a2dae63838e75a486255ed40f74c6add10
parent69cc119d64e1071dba25c6cf3d03998f8c22959d (diff)
downloadffmpeg-c6850d38625b731cdf9186f79bc38417736a7572.tar.gz
riff: retry reading metadata without padding if it fails with
Fixes Ticket1821 Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at> (cherry picked from commit d0c27e88d2bb495d61bd32f41769f767a0c2a802)
-rw-r--r--libavformat/riff.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavformat/riff.c b/libavformat/riff.c
index c787ec3060..0e63472c86 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -735,8 +735,13 @@ 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;
+ avio_seek(pb, -9, SEEK_CUR);
+ 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;
+ }
}
chunk_size += (chunk_size & 1);