fft-test: Check memory allocations
authorDiego Biurrun <diego@biurrun.de>
Mon, 21 Jul 2014 09:12:32 +0000 (02:12 -0700)
committerDiego Biurrun <diego@biurrun.de>
Wed, 23 Jul 2014 13:05:02 +0000 (06:05 -0700)
libavcodec/fft-test.c

index 7db33ea..98bf6f5 100644 (file)
@@ -63,11 +63,13 @@ static struct {
     float re, im;
 } *exptab;
 
-static void fft_ref_init(int nbits, int inverse)
+static int fft_ref_init(int nbits, int inverse)
 {
     int i, n = 1 << nbits;
 
     exptab = av_malloc((n / 2) * sizeof(*exptab));
+    if (!exptab)
+        return AVERROR(ENOMEM);
 
     for (i = 0; i < (n/2); i++) {
         double alpha = 2 * M_PI * (float)i / (float)n;
@@ -77,6 +79,7 @@ static void fft_ref_init(int nbits, int inverse)
         exptab[i].re = c1;
         exptab[i].im = s1;
     }
+    return 0;
 }
 
 static void fft_ref(FFTComplex *tabr, FFTComplex *tab, int nbits)
@@ -287,6 +290,9 @@ int main(int argc, char **argv)
     tab_ref = av_malloc(fft_size * sizeof(FFTComplex));
     tab2 = av_malloc(fft_size * sizeof(FFTSample));
 
+    if (!(tab && tab1 && tab_ref && tab2))
+        goto cleanup;
+
     switch (transform) {
 #if CONFIG_MDCT
     case TRANSFORM_MDCT:
@@ -304,7 +310,8 @@ int main(int argc, char **argv)
         else
             av_log(NULL, AV_LOG_INFO,"FFT");
         ff_fft_init(&s, fft_nbits, do_inverse);
-        fft_ref_init(fft_nbits, do_inverse);
+        if (err = fft_ref_init(fft_nbits, do_inverse) < 0)
+            goto cleanup;
         break;
 #if FFT_FLOAT
 #if CONFIG_RDFT
@@ -314,7 +321,8 @@ int main(int argc, char **argv)
         else
             av_log(NULL, AV_LOG_INFO,"DFT_R2C");
         ff_rdft_init(&r, fft_nbits, do_inverse ? IDFT_C2R : DFT_R2C);
-        fft_ref_init(fft_nbits, do_inverse);
+        if (err = fft_ref_init(fft_nbits, do_inverse) < 0)
+            goto cleanup;
         break;
 #endif /* CONFIG_RDFT */
 #if CONFIG_DCT
@@ -329,7 +337,7 @@ int main(int argc, char **argv)
 #endif /* FFT_FLOAT */
     default:
         av_log(NULL, AV_LOG_ERROR, "Requested transform not supported\n");
-        return 1;
+        goto cleanup;
     }
     av_log(NULL, AV_LOG_INFO," %d test\n", fft_size);
 
@@ -488,6 +496,7 @@ int main(int argc, char **argv)
 #endif /* FFT_FLOAT */
     }
 
+cleanup:
     av_free(tab);
     av_free(tab1);
     av_free(tab2);