mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-06 23:31:13 +00:00
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: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
bc3cf2bbd3
commit
4825d8a98d
@ -713,6 +713,18 @@ static int vobsub_probe(const AVProbeData *p)
|
|||||||
return 0;
|
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)
|
static int vobsub_read_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
int i, ret = 0, header_parsed = 0, langidx = 0;
|
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);
|
memcpy(par->extradata, header.str, header.len);
|
||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
|
if (ret < 0)
|
||||||
|
vobsub_read_close(s);
|
||||||
av_bprint_finalize(&header, NULL);
|
av_bprint_finalize(&header, NULL);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1021,18 +1034,6 @@ static int vobsub_read_seek(AVFormatContext *s, int stream_index,
|
|||||||
min_ts, ts, max_ts, flags);
|
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[] = {
|
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 },
|
{ "sub_name", "URI for .sub file", offsetof(VobSubDemuxContext, sub_name), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_DECODING_PARAM },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
|
Loading…
Reference in New Issue
Block a user