From 94ccbad488d1c315459b8dd22cebed114e72b226 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 11 Mar 2015 16:21:26 +0100 Subject: [PATCH] avcodec/ac3dec: Fix undefined shifts Found-by: Clang -fsanitize=shift Reported-by: Thierry Foucu Signed-off-by: Michael Niedermayer --- libavcodec/ac3dec.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index ac53bdc5e3..4e6e124d86 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -112,7 +112,7 @@ static const uint8_t ac3_default_coeffs[8][5][2] = { static inline int symmetric_dequant(int code, int levels) { - return ((code - (levels >> 1)) << 24) / levels; + return ((code - (levels >> 1)) * (1 << 24)) / levels; } /* @@ -470,7 +470,7 @@ static void calc_transform_coeffs_cpl(AC3DecodeContext *s) int cpl_coord = s->cpl_coords[ch][band] << 5; for (bin = band_start; bin < band_end; bin++) { s->fixed_coeffs[ch][bin] = - MULH(s->fixed_coeffs[CPL_CH][bin] << 4, cpl_coord); + MULH(s->fixed_coeffs[CPL_CH][bin] * (1 << 4), cpl_coord); } if (ch == 2 && s->phase_flags[band]) { for (bin = band_start; bin < band_end; bin++) @@ -567,8 +567,7 @@ static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, ma av_log(s->avctx, AV_LOG_ERROR, "bap %d is invalid in plain AC-3\n", bap); bap = 15; } - mantissa = get_sbits(gbc, quantization_tab[bap]); - mantissa <<= 24 - quantization_tab[bap]; + mantissa = (unsigned)get_sbits(gbc, quantization_tab[bap]) << (24 - quantization_tab[bap]); break; } coeffs[freq] = mantissa >> exps[freq];