mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
avformat/swfenc: Fix memleak upon write_header error
The SWF muxer accepts at most one mp3 audio and at most one VP6F, FLV1 or MJPEG stream. Upon encountering an mp3 stream, a fifo is allocated that leaks if one of the subsequent streams is incompliant with the restrictions mentioned above or if the framerate or samplerate are invalid. This is fixed by adding a deinit function to free said fifo. Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
a39fcbdffb
commit
d554aabdaf
@ -482,24 +482,13 @@ static int swf_write_trailer(AVFormatContext *s)
|
||||
{
|
||||
SWFContext *swf = s->priv_data;
|
||||
AVIOContext *pb = s->pb;
|
||||
AVCodecParameters *par, *video_par;
|
||||
int file_size, i;
|
||||
|
||||
video_par = NULL;
|
||||
for(i=0;i<s->nb_streams;i++) {
|
||||
par = s->streams[i]->codecpar;
|
||||
if (par->codec_type == AVMEDIA_TYPE_VIDEO)
|
||||
video_par = par;
|
||||
else {
|
||||
av_fifo_freep(&swf->audio_fifo);
|
||||
}
|
||||
}
|
||||
int file_size;
|
||||
|
||||
put_swf_tag(s, TAG_END);
|
||||
put_swf_end_tag(s);
|
||||
|
||||
/* patch file size and number of frames if not streamed */
|
||||
if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && video_par) {
|
||||
if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && swf->video_par) {
|
||||
file_size = avio_tell(pb);
|
||||
avio_seek(pb, 4, SEEK_SET);
|
||||
avio_wl32(pb, file_size);
|
||||
@ -514,6 +503,13 @@ static int swf_write_trailer(AVFormatContext *s)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void swf_deinit(AVFormatContext *s)
|
||||
{
|
||||
SWFContext *swf = s->priv_data;
|
||||
|
||||
av_fifo_freep(&swf->audio_fifo);
|
||||
}
|
||||
|
||||
#if CONFIG_SWF_MUXER
|
||||
AVOutputFormat ff_swf_muxer = {
|
||||
.name = "swf",
|
||||
@ -526,6 +522,7 @@ AVOutputFormat ff_swf_muxer = {
|
||||
.write_header = swf_write_header,
|
||||
.write_packet = swf_write_packet,
|
||||
.write_trailer = swf_write_trailer,
|
||||
.deinit = swf_deinit,
|
||||
.flags = AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
#endif
|
||||
@ -540,6 +537,7 @@ AVOutputFormat ff_avm2_muxer = {
|
||||
.write_header = swf_write_header,
|
||||
.write_packet = swf_write_packet,
|
||||
.write_trailer = swf_write_trailer,
|
||||
.deinit = swf_deinit,
|
||||
.flags = AVFMT_TS_NONSTRICT,
|
||||
};
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user