summaryrefslogtreecommitdiff
path: root/libavcodec/audiotoolboxdec.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2017-05-25 11:00:47 -0300
committerJames Almer <jamrial@gmail.com>2017-09-06 11:35:07 -0300
commit7273e234dee5dfeee67cc365a8f7fa0b8211127c (patch)
treed3d68f8ce7dbd0531b2f16281e03834dba86d286 /libavcodec/audiotoolboxdec.c
parenteea69a9f250e565640f1dc69b285a4d27668f67b (diff)
avcodec/audiotoolboxdec: always use a copy of the AVCodecContext extradata
Fixes memleaks introduced by 954e2b3d34b7c2d82871254f07e2f8a39bc451cb Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/audiotoolboxdec.c')
-rw-r--r--libavcodec/audiotoolboxdec.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libavcodec/audiotoolboxdec.c b/libavcodec/audiotoolboxdec.c
index a8655f0421..d499a0afc8 100644
--- a/libavcodec/audiotoolboxdec.c
+++ b/libavcodec/audiotoolboxdec.c
@@ -399,8 +399,13 @@ static av_cold int ffat_create_decoder(AVCodecContext *avctx, AVPacket *pkt)
static av_cold int ffat_init_decoder(AVCodecContext *avctx)
{
ATDecodeContext *at = avctx->priv_data;
- at->extradata = avctx->extradata;
- at->extradata_size = avctx->extradata_size;
+ if (avctx->extradata_size) {
+ at->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
+ if (!at->extradata)
+ return AVERROR(ENOMEM);
+ at->extradata_size = avctx->extradata_size;
+ memcpy(at->extradata, avctx->extradata, avctx->extradata_size);
+ }
if ((avctx->channels && avctx->sample_rate) || ffat_usable_extradata(avctx))
return ffat_create_decoder(avctx, NULL);
@@ -599,6 +604,7 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx)
av_packet_unref(&at->new_in_pkt);
av_packet_unref(&at->in_pkt);
av_free(at->decoded_data);
+ av_free(at->extradata);
return 0;
}