[FFmpeg-cvslog] asfdec: handle the case when the stream index has an invalid value better
Alexandra Hájková
git at videolan.org
Sun Nov 29 15:32:51 CET 2015
ffmpeg | branch: master | Alexandra Hájková <alexandra.khirnova at gmail.com> | Thu Nov 19 14:25:41 2015 +0100| [8375dc1dd101d51baa430f34c0bcadfa37873896] | committer: Luca Barbato
asfdec: handle the case when the stream index has an invalid value better
The demuxer returned INVALIDDATA and failed to demux the remaining data
when an invalid stream index was read, now it just skips the asf packet
for the stream with an invalid stream index and continues demuxing.
Reported-By: Hendrik Leppkes
Signed-off-by: Luca Barbato <lu_zero at gentoo.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8375dc1dd101d51baa430f34c0bcadfa37873896
---
libavformat/asfdec.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index e1b0b8c..ca7712f 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -1276,8 +1276,16 @@ static int asf_read_payload(AVFormatContext *s, AVPacket *pkt)
break;
}
}
- if (!asf_pkt)
- return AVERROR_INVALIDDATA;
+ if (!asf_pkt) {
+ if (asf->packet_offset + asf->packet_size <= asf->data_offset + asf->data_size) {
+ avio_seek(pb, asf->packet_offset + asf->packet_size, SEEK_SET);
+ av_log(s, AV_LOG_WARNING, "Skipping the stream with the invalid stream index %d.\n",
+ asf->stream_index);
+ return AVERROR(EAGAIN);
+ } else
+ return AVERROR_INVALIDDATA;
+ }
+
if (stream_num >> 7)
asf_pkt->flags |= AV_PKT_FLAG_KEY;
READ_LEN(asf->prop_flags & ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE,
@@ -1418,8 +1426,14 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
else
asf->state = READ_MULTI;
}
- if ((ret = asf_read_payload(s, pkt)) < 0)
+ ret = asf_read_payload(s, pkt);
+ if (ret == AVERROR(EAGAIN)) {
+ asf->state = PARSE_PACKET_HEADER;
+ continue;
+ }
+ else if (ret < 0)
return ret;
+
switch (asf->state) {
case READ_SINGLE:
if (!asf->sub_left)
More information about the ffmpeg-cvslog
mailing list