[FFmpeg-cvslog] avformat/matroskadec: Call matroska_read_close() on header parsing error
Michael Niedermayer
git at videolan.org
Fri Jun 24 18:47:50 CEST 2016
ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Fri Jun 24 18:26:46 2016 +0200| [f573acc4244769c294d45df9e7dc47d9d8cfb8b7] | committer: Michael Niedermayer
avformat/matroskadec: Call matroska_read_close() on header parsing error
Fixes memleak
Fixes Ticket5169
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f573acc4244769c294d45df9e7dc47d9d8cfb8b7
---
libavformat/matroskadec.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 7880a10..f3d701f 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -733,6 +733,8 @@ static const EbmlSyntax matroska_clusters_incremental[] = {
static const char *const matroska_doctypes[] = { "matroska", "webm" };
+static int matroska_read_close(AVFormatContext *s);
+
static int matroska_resync(MatroskaDemuxContext *matroska, int64_t last_pos)
{
AVIOContext *pb = matroska->ctx->pb;
@@ -2437,7 +2439,7 @@ static int matroska_read_header(AVFormatContext *s)
while (res != 1) {
res = matroska_resync(matroska, pos);
if (res < 0)
- return res;
+ goto fail;
pos = avio_tell(matroska->ctx->pb);
res = ebml_parse(matroska, matroska_segment, matroska);
}
@@ -2456,7 +2458,7 @@ static int matroska_read_header(AVFormatContext *s)
res = matroska_parse_tracks(s);
if (res < 0)
- return res;
+ goto fail;
attachments = attachments_list->elem;
for (j = 0; j < attachments_list->nb_elem; j++) {
@@ -2530,6 +2532,9 @@ static int matroska_read_header(AVFormatContext *s)
matroska_convert_tags(s);
return 0;
+fail:
+ matroska_read_close(s);
+ return res;
}
/*
More information about the ffmpeg-cvslog
mailing list