[FFmpeg-devel] [PATCH 08/11] avformat/dashenc: Fix leak of AVFormatContext on error

Jeyapal, Karthick kjeyapal at akamai.com
Tue Jan 7 18:03:15 EET 2020


On 1/7/20 7:25 PM, Andreas Rheinhardt wrote:
> 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>
> ---
>  libavformat/dashenc.c | 9 ++++-----
>  1 file 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;
LGTM

Regards,
Karthick



More information about the ffmpeg-devel mailing list