[FFmpeg-cvslog] avformat/matroskadec: Move AVBufferRef instead of copying, fix memleak

Andreas Rheinhardt git at videolan.org
Mon Jun 15 18:43:23 EEST 2020

ffmpeg | branch: release/4.3 | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Sat Jun 13 22:34:19 2020 +0200| [751f285152b90faf78d3dde76bc5cee16f093813] | committer: Andreas Rheinhardt

avformat/matroskadec: Move AVBufferRef instead of copying, fix memleak

EBML binary elements are already made reference-counted when read;
so when populating the AVStream.attached_pic, one does not need to
allocate a new buffer for the data; instead the current code just
creates a new reference to the underlying AVBuffer. But this can be
improved even further: Just move the already existing reference.

This also fixes a memleak that happens upon error because
matroska_read_close has not been called in this scenario.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
(cherry picked from commit cbe336c9e81e2d9de3a18abef887c9255a9b9da5)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=751f285152b90faf78d3dde76bc5cee16f093813

 libavformat/matroskadec.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index bb3a126c29..b1da40983f 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -2938,9 +2938,8 @@ static int matroska_read_header(AVFormatContext *s)
                 st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
-                pkt->buf = av_buffer_ref(attachments[j].bin.buf);
-                if (!pkt->buf)
-                    return AVERROR(ENOMEM);
+                pkt->buf          = attachments[j].bin.buf;
+                attachments[j].bin.buf = NULL;
                 pkt->data         = attachments[j].bin.data;
                 pkt->size         = attachments[j].bin.size;
                 pkt->stream_index = st->index;

More information about the ffmpeg-cvslog mailing list