diff options
author | 孙浩 and 张洪亮(望初) <tony.sh and wangchu.zhl@alibaba-inc.com> | 2017-08-25 12:37:25 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2017-09-17 15:57:27 +0200 |
commit | 0eb399381a2b3429980aa939bcd4dfbf0780f140 (patch) | |
tree | 90f0711b9ece58dd7a9281cb680479e0eb24d124 /libavformat | |
parent | 0d32491b74947bdb0d2be04d8ca909ff9406660d (diff) | |
download | ffmpeg-0eb399381a2b3429980aa939bcd4dfbf0780f140.tar.gz |
avformat/asfdec: Fix DoS due to lack of eof check
Fixes: loop.asf
Found-by: Xiaohei and Wangchu from Alibaba Security Team
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit 7f9ec5593e04827249e7aeb466da06a98a0d7329)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/asfdec_f.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libavformat/asfdec_f.c b/libavformat/asfdec_f.c index 2c81b138f2..294fd345f5 100644 --- a/libavformat/asfdec_f.c +++ b/libavformat/asfdec_f.c @@ -749,13 +749,15 @@ static int asf_read_marker(AVFormatContext *s, int64_t size) count = avio_rl32(pb); // markers count avio_rl16(pb); // reserved 2 bytes name_len = avio_rl16(pb); // name length - for (i = 0; i < name_len; i++) - avio_r8(pb); // skip the name + avio_skip(pb, name_len); for (i = 0; i < count; i++) { int64_t pres_time; int name_len; + if (avio_feof(pb)) + return AVERROR_INVALIDDATA; + avio_rl64(pb); // offset, 8 bytes pres_time = avio_rl64(pb); // presentation time pres_time -= asf->hdr.preroll * 10000; |