Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> --- The easiest way to hit this memleak is by supplying an unreasonably low number to reserve_index_space.
libavformat/matroskaenc.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 37706e56c7..4b32130a94 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2567,7 +2567,7 @@ static int mkv_write_trailer(AVFormatContext *s) if (ret < 0) { av_log(s, AV_LOG_ERROR, "Could not write cached audio packet ret:%d\n", ret); - return ret; + goto fail; } } @@ -2577,7 +2577,7 @@ static int mkv_write_trailer(AVFormatContext *s) ret = mkv_write_chapters(s); if (ret < 0) - return ret; + goto fail; if ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !mkv->is_live) { @@ -2595,7 +2595,8 @@ static int mkv_write_trailer(AVFormatContext *s) "Insufficient space reserved for cues: %d " "(needed: %" PRId64 ").\n", mkv->reserve_cues_space, cues_end - cuespos); - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto fail; } if (cues_end < cuespos + mkv->reserve_cues_space) @@ -2610,7 +2611,7 @@ static int mkv_write_trailer(AVFormatContext *s) ret = mkv_add_seekhead_entry(mkv->seekhead, MATROSKA_ID_CUES, cuespos); if (ret < 0) - return ret; + goto fail; } mkv_write_seekhead(pb, mkv); @@ -2664,8 +2665,9 @@ static int mkv_write_trailer(AVFormatContext *s) end_ebml_master(pb, mkv->segment); } +fail: mkv_free(mkv); - return 0; + return ret; } static int mkv_query_codec(enum AVCodecID codec_id, int std_compliance) -- 2.20.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".