avcodec/audiotoolboxdec: always use a copy of the AVCodecContext extradata
authorJames Almer <jamrial@gmail.com>
Thu, 25 May 2017 14:00:47 +0000 (11:00 -0300)
committerJames Almer <jamrial@gmail.com>
Wed, 6 Sep 2017 14:35:07 +0000 (11:35 -0300)
Fixes memleaks introduced by 954e2b3d34b7c2d82871254f07e2f8a39bc451cb

Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/audiotoolboxdec.c

index a8655f0..d499a0a 100644 (file)
@@ -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;
 }