diff options
author | Andreas Cadhalpun <andreas.cadhalpun@googlemail.com> | 2015-04-16 21:25:26 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-04-17 15:20:30 +0200 |
commit | b420354a8b6611d7a5af1f7acd04a5055ded0bb7 (patch) | |
tree | 820fdf347c46f4f65dea5a16ab7ea0be6e16b047 | |
parent | 1d0f9c92c5505ada35a20d6812fb41a47aa0d14a (diff) | |
download | ffmpeg-b420354a8b6611d7a5af1f7acd04a5055ded0bb7.tar.gz |
ac3: validate end in ff_ac3_bit_alloc_calc_mask
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>
(cherry picked from commit bc4fee7f2a51635fa3c0f61d1e5164da1efeded3)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/ac3.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libavcodec/ac3.c b/libavcodec/ac3.c index 29e132f5d1..8d39bbe83b 100644 --- a/libavcodec/ac3.c +++ b/libavcodec/ac3.c @@ -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; |