[FFmpeg-cvslog] avformat/dashenc: Fix leak of AVFormatContext on error

Andreas Rheinhardt git at videolan.org
Wed May 20 08:38:07 EEST 2020


ffmpeg | branch: release/4.2 | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Tue Jan  7 14:55:46 2020 +0100| [efea91321e5eb702e8a37bf29cbd84aa2ad81acb] | committer: Andreas Rheinhardt

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 at gmail.com>
Reviewed-by: "Jeyapal, Karthick" <kjeyapal at akamai.com>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
(cherry picked from commit 8aeab0dbc159d65a20bb4cc89c2524b482fd867a)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=efea91321e5eb702e8a37bf29cbd84aa2ad81acb
---

 libavformat/dashenc.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
index 24d43c34ea..f0e45da89a 100644
--- a/libavformat/dashenc.c
+++ b/libavformat/dashenc.c
@@ -1207,10 +1207,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)
@@ -1243,10 +1239,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;



More information about the ffmpeg-cvslog mailing list