diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-03-27 05:31:13 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-04-05 18:30:50 +0200 |
commit | de0b04551da4e1470ce1c99321a768887df8c650 (patch) | |
tree | 87c8455bdb33c0d67f5da5d14a443511ffe769d7 | |
parent | 2084ea8c1dde97230a270155fc530b945edbf1cf (diff) | |
download | ffmpeg-de0b04551da4e1470ce1c99321a768887df8c650.tar.gz |
avformat/avidec: Fix memleak when allocating DVDemuxContext fails
An AVIStream (intended to be used as private data for an AVStream) would
leak in this scenario.
Also return a more fitting error code instead of AVERROR_INVALIDDATA.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavformat/avidec.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 18402f0032..87298513c2 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -605,9 +605,12 @@ static int avi_read_header(AVFormatContext *s) ast = s->streams[0]->priv_data; st->priv_data = NULL; ff_free_stream(s, st); - avi->dv_demux = avpriv_dv_init_demux(s); - if (!avi->dv_demux) - goto fail; + + avi->dv_demux = avpriv_dv_init_demux(s); + if (!avi->dv_demux) { + av_free(ast); + return AVERROR(ENOMEM); + } s->streams[0]->priv_data = ast; avio_skip(pb, 3 * 4); |