diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-01-07 14:55:46 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2020-01-08 01:32:26 +0100 |
commit | 8aeab0dbc159d65a20bb4cc89c2524b482fd867a (patch) | |
tree | 95eedaafdfc60e9ec328b04558d58e139664727d /libavformat/dashenc.c | |
parent | ad18f69bcba05f825b7a27e779873ae830273e84 (diff) | |
download | ffmpeg-8aeab0dbc159d65a20bb4cc89c2524b482fd867a.tar.gz |
avformat/dashenc: Fix leak of AVFormatContext on error
The Dash muxer uses submuxers and when one such submuxer has been allocated,
it is initially only stored in a temporary variable. Therefore it leaks
if an error happens between the allocation and storing it permanently.
This commit changes this.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Reviewed-by: "Jeyapal, Karthick" <kjeyapal@akamai.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/dashenc.c')
-rw-r--r-- | libavformat/dashenc.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index b84736881f..dab7010179 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -1225,10 +1225,6 @@ static int dash_init(AVFormatContext *s) dict_copy_entry(&as->metadata, s->streams[i]->metadata, "language"); dict_copy_entry(&as->metadata, s->streams[i]->metadata, "role"); - ctx = avformat_alloc_context(); - if (!ctx) - return AVERROR(ENOMEM); - if (c->init_seg_name) { os->init_seg_name = av_strireplace(c->init_seg_name, "$ext$", os->extension_name); if (!os->init_seg_name) @@ -1261,10 +1257,13 @@ static int dash_init(AVFormatContext *s) } } + os->ctx = ctx = avformat_alloc_context(); + if (!ctx) + return AVERROR(ENOMEM); + ctx->oformat = av_guess_format(os->format_name, NULL, NULL); if (!ctx->oformat) return AVERROR_MUXER_NOT_FOUND; - os->ctx = ctx; ctx->interrupt_callback = s->interrupt_callback; ctx->opaque = s->opaque; ctx->io_close = s->io_close; |