]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/ac3dec: Check operations that can fail
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Thu, 3 Dec 2020 15:04:13 +0000 (16:04 +0100)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Sat, 9 Jan 2021 03:06:32 +0000 (04:06 +0100)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavcodec/ac3dec.c
libavcodec/ac3dec_fixed.c
libavcodec/ac3dec_float.c

index eaa327a3ee9446d9d59d6fcff99639699245fee1..3e4bec56b1ca55d45ed2ec8a0e280608069dd7e1 100644 (file)
@@ -184,22 +184,25 @@ static av_cold void ac3_tables_init(void)
 static av_cold int ac3_decode_init(AVCodecContext *avctx)
 {
     AC3DecodeContext *s = avctx->priv_data;
-    int i;
+    int i, ret;
 
     s->avctx = avctx;
 
     ac3_tables_init();
-    ff_mdct_init(&s->imdct_256, 8, 1, 1.0);
-    ff_mdct_init(&s->imdct_512, 9, 1, 1.0);
+    if ((ret = ff_mdct_init(&s->imdct_256, 8, 1, 1.0)) < 0 ||
+        (ret = ff_mdct_init(&s->imdct_512, 9, 1, 1.0)) < 0)
+        return ret;
     AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
     ff_bswapdsp_init(&s->bdsp);
 
 #if (USE_FIXED)
     s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags & AV_CODEC_FLAG_BITEXACT);
 #else
-    s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
     ff_fmt_convert_init(&s->fmt_conv, avctx);
+    s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
 #endif
+    if (!s->fdsp)
+        return AVERROR(ENOMEM);
 
     ff_ac3dsp_init(&s->ac3dsp, avctx->flags & AV_CODEC_FLAG_BITEXACT);
     av_lfg_init(&s->dith_state, 0);
index f36854cdc58b3edaf8d5a42e3c7f36dc10b8ab66..662cb8169ed8ec1050e0bae973354a8dc8e18062 100644 (file)
@@ -182,4 +182,5 @@ AVCodec ff_ac3_fixed_decoder = {
     .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
                                                       AV_SAMPLE_FMT_NONE },
     .priv_class     = &ac3_decoder_class,
+    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
index 57a626a1813252a4f42c3fca7b0231bc3d0ac411..5010ee0ca5b9ea5088d3896700881e8e12517e5b 100644 (file)
@@ -67,6 +67,7 @@ AVCodec ff_ac3_decoder = {
     .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
                                                       AV_SAMPLE_FMT_NONE },
     .priv_class     = &ac3_decoder_class,
+    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
 
 #if CONFIG_EAC3_DECODER
@@ -91,5 +92,6 @@ AVCodec ff_eac3_decoder = {
     .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
                                                       AV_SAMPLE_FMT_NONE },
     .priv_class     = &eac3_decoder_class,
+    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
 #endif