summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-04-18 21:36:09 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-04-20 18:35:00 +0200
commitd026fef999f7e2491721b3878bea6e6da8b9f92e (patch)
tree32a74243f892903ff8af50739267d8dbab86fd9b
parentee593bff984bed20a35e2a98119d82a1bcf6d3bd (diff)
avformat/utils: Fix memleak when decoding subtitle in find_stream_info
avformat_find_stream_info() may decode some frames to get stream information. And when it does this for subtitles, the decoded subtitles leak. (Decoding subtitles was added in b1511e00f6fefde6cb31b2e17f7812cfac1c8bd6 for PGS subtitles. When PGS subtitles originate from a container that exports every segment as a packet of its own, no output will be generated when decoding a packet, because not enough input is available. Yet when used with PGS subtitles in the Matroska form a single packet contains enough data to generate output. Yet said output is not freed, hence this leak.) Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavformat/utils.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 4f777ba849..2fb2309f68 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -3126,6 +3126,8 @@ static int try_decode_frame(AVFormatContext *s, AVStream *st,
} else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = avcodec_decode_subtitle2(avctx, &subtitle,
&got_picture, &pkt);
+ if (got_picture)
+ avsubtitle_free(&subtitle);
if (ret >= 0)
pkt.size = 0;
}