aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author孙浩 and 张洪亮(望初) <tony.sh and wangchu.zhl@alibaba-inc.com>2017-08-25 01:15:29 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2017-08-28 01:43:06 +0200
commit2ac9bc34978cf77eebaf288741bdfa669e1df195 (patch)
tree7bafc9a3005a8c16dd232f1b0e955ac57d09bc93
parent983f90ef1819a0d4d3a5685b8a617a18eaecbd4b (diff)
downloadffmpeg-2ac9bc34978cf77eebaf288741bdfa669e1df195.tar.gz
avformat/rl2: Fix DoS due to lack of eof check
Fixes: loop.rl2 Found-by: Xiaohei and Wangchu from Alibaba Security Team Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 96f24d1bee7fe7bac08e2b7c74db1a046c9dc0de) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/rl2.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/libavformat/rl2.c b/libavformat/rl2.c
index d354339ea3..fe3658d88f 100644
--- a/libavformat/rl2.c
+++ b/libavformat/rl2.c
@@ -170,12 +170,21 @@ static av_cold int rl2_read_header(AVFormatContext *s)
}
/** read offset and size tables */
- for(i=0; i < frame_count;i++)
+ for(i=0; i < frame_count;i++) {
+ if (avio_feof(pb))
+ return AVERROR_INVALIDDATA;
chunk_size[i] = avio_rl32(pb);
- for(i=0; i < frame_count;i++)
+ }
+ for(i=0; i < frame_count;i++) {
+ if (avio_feof(pb))
+ return AVERROR_INVALIDDATA;
chunk_offset[i] = avio_rl32(pb);
- for(i=0; i < frame_count;i++)
+ }
+ for(i=0; i < frame_count;i++) {
+ if (avio_feof(pb))
+ return AVERROR_INVALIDDATA;
audio_size[i] = avio_rl32(pb) & 0xFFFF;
+ }
/** build the sample index */
for(i=0;i<frame_count;i++){