aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-10-23 14:59:41 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-07-01 21:31:59 +0200
commit5daaa64d8ae1b6d95c99998dbdf19e9d94f0abe0 (patch)
tree9c54a310fc92df1e6705998c1c0359f0358c7498
parent07eb039e047b68227b08428314314ff7b1273efa (diff)
downloadffmpeg-5daaa64d8ae1b6d95c99998dbdf19e9d94f0abe0.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> (cherry picked from commit 26aa04991e02f5fb83ffe177fbd832d7d7deb2fb) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavformat/apngenc.c14
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,
};