summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-03-27 05:21:32 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-04-05 18:22:57 +0200
commit2084ea8c1dde97230a270155fc530b945edbf1cf (patch)
tree9fd75c11980f63044a18c8e8e5bd7cb6be858e9f /libavformat
parent7940655d14e1741d68c364a8d027152f4f3420eb (diff)
avformat/avidec: Fix memleak when DV demuxer is disabled
If one uses a build without dv demuxer, an AVIStream struct that is destined to be used as private data for an AVStream by the avi demuxer would leak, because it has been moved from the AVStream (that is going to be freed) and only stored in a local variable (in order to be used for another AVStream), but if the dv demuxer is disabled, the earlier code returned immediately instead. Also return a better error code in this scenario (instead of AVERROR_INVALIDDATA). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avidec.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index ae343e732a..18402f0032 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -599,15 +599,16 @@ static int avi_read_header(AVFormatContext *s)
handler != MKTAG('d', 'v', 's', 'l'))
goto fail;
+ if (!CONFIG_DV_DEMUXER)
+ return AVERROR_DEMUXER_NOT_FOUND;
+
ast = s->streams[0]->priv_data;
st->priv_data = NULL;
ff_free_stream(s, st);
- if (CONFIG_DV_DEMUXER) {
avi->dv_demux = avpriv_dv_init_demux(s);
if (!avi->dv_demux)
goto fail;
- } else
- goto fail;
+
s->streams[0]->priv_data = ast;
avio_skip(pb, 3 * 4);
ast->scale = avio_rl32(pb);