提交 4825d8a9 编写于 作者: A Andreas Rheinhardt 提交者: Michael Niedermayer

avformat/mpeg: Fix leaks of AVFormatContext and subtitle packets

If an error happens in vobsub_read_header() after allocating the
AVFormatContext intended to read the sub-file, both the AVFormatContext
as well as the data in the subtitles queues leaks. This has been fixed.
Signed-off-by: NAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Signed-off-by: NMichael Niedermayer <michael@niedermayer.cc>
上级 bc3cf2bb
......@@ -713,6 +713,18 @@ static int vobsub_probe(const AVProbeData *p)
return 0;
}
static int vobsub_read_close(AVFormatContext *s)
{
VobSubDemuxContext *vobsub = s->priv_data;
int i;
for (i = 0; i < s->nb_streams; i++)
ff_subtitles_queue_clean(&vobsub->q[i]);
if (vobsub->sub_ctx)
avformat_close_input(&vobsub->sub_ctx);
return 0;
}
static int vobsub_read_header(AVFormatContext *s)
{
int i, ret = 0, header_parsed = 0, langidx = 0;
......@@ -896,7 +908,8 @@ static int vobsub_read_header(AVFormatContext *s)
memcpy(par->extradata, header.str, header.len);
}
end:
if (ret < 0)
vobsub_read_close(s);
av_bprint_finalize(&header, NULL);
return ret;
}
......@@ -1021,18 +1034,6 @@ static int vobsub_read_seek(AVFormatContext *s, int stream_index,
min_ts, ts, max_ts, flags);
}
static int vobsub_read_close(AVFormatContext *s)
{
VobSubDemuxContext *vobsub = s->priv_data;
int i;
for (i = 0; i < s->nb_streams; i++)
ff_subtitles_queue_clean(&vobsub->q[i]);
if (vobsub->sub_ctx)
avformat_close_input(&vobsub->sub_ctx);
return 0;
}
static const AVOption options[] = {
{ "sub_name", "URI for .sub file", offsetof(VobSubDemuxContext, sub_name), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_DECODING_PARAM },
{ NULL }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册