mirror of https://git.ffmpeg.org/ffmpeg.git
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>
(cherry picked from commit 8aeab0dbc1
)
This commit is contained in:
parent
9dad33fcae
commit
efea91321e
|
@ -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, "language");
|
||||||
dict_copy_entry(&as->metadata, s->streams[i]->metadata, "role");
|
dict_copy_entry(&as->metadata, s->streams[i]->metadata, "role");
|
||||||
|
|
||||||
ctx = avformat_alloc_context();
|
|
||||||
if (!ctx)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
|
|
||||||
if (c->init_seg_name) {
|
if (c->init_seg_name) {
|
||||||
os->init_seg_name = av_strireplace(c->init_seg_name, "$ext$", os->extension_name);
|
os->init_seg_name = av_strireplace(c->init_seg_name, "$ext$", os->extension_name);
|
||||||
if (!os->init_seg_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);
|
ctx->oformat = av_guess_format(os->format_name, NULL, NULL);
|
||||||
if (!ctx->oformat)
|
if (!ctx->oformat)
|
||||||
return AVERROR_MUXER_NOT_FOUND;
|
return AVERROR_MUXER_NOT_FOUND;
|
||||||
os->ctx = ctx;
|
|
||||||
ctx->interrupt_callback = s->interrupt_callback;
|
ctx->interrupt_callback = s->interrupt_callback;
|
||||||
ctx->opaque = s->opaque;
|
ctx->opaque = s->opaque;
|
||||||
ctx->io_close = s->io_close;
|
ctx->io_close = s->io_close;
|
||||||
|
|
Loading…
Reference in New Issue