[FFmpeg-devel] [PATCH 1/3] avformat/mlvdec: Check for existence of AVIOContext before using it
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Fri Aug 14 20:31:28 EEST 2020
Andreas Rheinhardt:
> The mlv demuxer supports input split into multiple files; if invalid
> data is encountered when parsing one of the subsequent files, that file
> is closed. But at this point some index entries belonging to this file
> might already have been added. In this case, the read_packet function
> might try to use the AVIOContext (which is NULL) to read data which will
> of course crash. This commit fixes this.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> As an alternative to patches 1 and 3 one could also just error out if
> one of the subsequent files is bad.
>
> libavformat/mlvdec.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/mlvdec.c b/libavformat/mlvdec.c
> index 03aed71024..7c7ced7f76 100644
> --- a/libavformat/mlvdec.c
> +++ b/libavformat/mlvdec.c
> @@ -411,6 +411,10 @@ static int read_packet(AVFormatContext *avctx, AVPacket *pkt)
> }
>
> pb = mlv->pb[st->index_entries[index].size];
> + if (!pb) {
> + ret = FFERROR_REDO;
> + goto next_packet;
> + }
> avio_seek(pb, st->index_entries[index].pos, SEEK_SET);
>
> avio_skip(pb, 4); // blockType
> @@ -439,12 +443,14 @@ static int read_packet(AVFormatContext *avctx, AVPacket *pkt)
> pkt->stream_index = mlv->stream_index;
> pkt->pts = mlv->pts;
>
> + ret = 0;
> +next_packet:
> mlv->stream_index++;
> if (mlv->stream_index == avctx->nb_streams) {
> mlv->stream_index = 0;
> mlv->pts++;
> }
> - return 0;
> + return ret;
> }
>
> static int read_seek(AVFormatContext *avctx, int stream_index, int64_t timestamp, int flags)
>
Will apply this patchset tomorrow unless there are objections.
- Andreas
More information about the ffmpeg-devel
mailing list