]> git.sesse.net Git - ffmpeg/commitdiff
avformat/flacenc: Fix memleak when writing attached pictures fails
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Fri, 20 Nov 2020 16:36:39 +0000 (17:36 +0100)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Thu, 26 Nov 2020 12:32:30 +0000 (13:32 +0100)
The FLAC muxer currently stores an attached picture corresponding to an
AVStream in AVStream.priv_data. The AVPacket contained therein is
unreferenced after it has been written. The AVPacket structure itself is
then freed generically as AVStream.priv_data.

And this can lead to memleaks if an attached picture is not written:
It might be because the trailer is never written or because writing
a previous attached picture failed in case error_recognition is set
to explode.

Therefore free the packets properly (i.e. with av_packet_free())
in the muxer's deinit function.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavformat/flacenc.c

index 6b8ce8d7ee3b287a21bfc872859984d0f7a9e904..1c983486aa94a5730d42cd51db88154a358fd110 100644 (file)
@@ -347,6 +347,8 @@ static void flac_deinit(struct AVFormatContext *s)
     FlacMuxerContext *c = s->priv_data;
 
     avpriv_packet_list_free(&c->queue, &c->queue_end);
+    for (unsigned i = 0; i < s->nb_streams; i++)
+        av_packet_free((AVPacket **)&s->streams[i]->priv_data);
 }
 
 static int flac_write_packet(struct AVFormatContext *s, AVPacket *pkt)