ffmpeg | branch: master | Michael Niedermayer <mich...@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 <mich...@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; } /* _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog