diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2019-10-23 14:59:41 +0200 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2019-10-30 15:28:48 -0300 |
commit | 26aa04991e02f5fb83ffe177fbd832d7d7deb2fb (patch) | |
tree | 46ef3da4347c59f4312a643a3e3986bc32c14b10 | |
parent | 89389b7ed47b70f98d27b84e2aae3343d92d9682 (diff) | |
download | ffmpeg-26aa04991e02f5fb83ffe177fbd832d7d7deb2fb.tar.gz |
avformat/apngenc: Add deinit function
Prevents memleaks when the trailer is never written (e.g. when there was
a write error when writing the header).
Fixes ticket #8347.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavformat/apngenc.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libavformat/apngenc.c b/libavformat/apngenc.c index 77c1c916c2..88cd8054d6 100644 --- a/libavformat/apngenc.c +++ b/libavformat/apngenc.c @@ -251,7 +251,6 @@ static int apng_write_trailer(AVFormatContext *format_context) if (apng->prev_packet) { ret = flush_packet(format_context, NULL); - av_freep(&apng->prev_packet); if (ret < 0) return ret; } @@ -266,12 +265,18 @@ static int apng_write_trailer(AVFormatContext *format_context) apng_write_chunk(io_context, MKBETAG('a', 'c', 'T', 'L'), buf, 8); } - av_freep(&apng->extra_data); - apng->extra_data = 0; - return 0; } +static void apng_deinit(AVFormatContext *s) +{ + APNGMuxContext *apng = s->priv_data; + + av_packet_free(&apng->prev_packet); + av_freep(&apng->extra_data); + apng->extra_data_size = 0; +} + #define OFFSET(x) offsetof(APNGMuxContext, x) #define ENC AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { @@ -300,6 +305,7 @@ AVOutputFormat ff_apng_muxer = { .write_header = apng_write_header, .write_packet = apng_write_packet, .write_trailer = apng_write_trailer, + .deinit = apng_deinit, .priv_class = &apng_muxer_class, .flags = AVFMT_VARIABLE_FPS, }; |