summaryrefslogtreecommitdiff
path: root/libavcodec/sonic.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-09-13 01:10:40 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-09-17 00:09:08 +0200
commit7d91f9271ee336da93b6871bf3306348ac1595a7 (patch)
tree9d729fb3d135e266fb6a4b8d438d6321e556d256 /libavcodec/sonic.c
parent0b45ac571713cc8fda7aa5381c68ad671d21504b (diff)
avcodec/sonic: Fix leaks upon allocation errors
The Sonic decoder and encoders allocate several buffers in their init function and return immediately if one of these allocations fails; this will lead to leaks if there was an earlier successfull allocation. Fix this by setting the FF_CODEC_CAP_INIT_CLEANUP flag. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/sonic.c')
-rw-r--r--libavcodec/sonic.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libavcodec/sonic.c b/libavcodec/sonic.c
index ea6ef10c9e..fa4ecc3a7a 100644
--- a/libavcodec/sonic.c
+++ b/libavcodec/sonic.c
@@ -1095,6 +1095,7 @@ AVCodec ff_sonic_decoder = {
.close = sonic_decode_close,
.decode = sonic_decode_frame,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL,
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};
#endif /* CONFIG_SONIC_DECODER */
@@ -1109,6 +1110,7 @@ AVCodec ff_sonic_encoder = {
.encode2 = sonic_encode_frame,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE },
.capabilities = AV_CODEC_CAP_EXPERIMENTAL,
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.close = sonic_encode_close,
};
#endif
@@ -1124,6 +1126,7 @@ AVCodec ff_sonic_ls_encoder = {
.encode2 = sonic_encode_frame,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE },
.capabilities = AV_CODEC_CAP_EXPERIMENTAL,
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.close = sonic_encode_close,
};
#endif