ac3: validate end in ff_ac3_bit_alloc_calc_mask
authorAndreas Cadhalpun <andreas.cadhalpun@googlemail.com>
Thu, 16 Apr 2015 19:25:26 +0000 (21:25 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 16 Apr 2015 19:37:16 +0000 (21:37 +0200)
This fixes an invalid read if end is 0:
     band_end   = ff_ac3_bin_to_band_tab[end-1] + 1;

Depending on what is before the array, this can cause stack smashing,
when band_end becomes too large.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/ac3.c

index c4fc77c..b54315d 100644 (file)
@@ -131,6 +131,9 @@ int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
     int band_start, band_end, begin, end1;
     int lowcomp, fastleak, slowleak;
 
+    if (end <= 0)
+        return AVERROR_INVALIDDATA;
+
     /* excitation function */
     band_start = ff_ac3_bin_to_band_tab[start];
     band_end   = ff_ac3_bin_to_band_tab[end-1] + 1;