X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fatrac3plus.c;h=8d1788958229d0ff5dac2a21fda199a284624664;hb=aa5e49e46d3aa22cc805c85a982afac1405aede5;hp=3e3bba801b91fb8c9c2ff62bd9faf5897f1dfa09;hpb=5c1aafff2d844b177b0b20db4a38d8460992558b;p=ffmpeg diff --git a/libavcodec/atrac3plus.c b/libavcodec/atrac3plus.c index 3e3bba801b9..8d178895822 100644 --- a/libavcodec/atrac3plus.c +++ b/libavcodec/atrac3plus.c @@ -81,8 +81,8 @@ av_cold void ff_atrac3p_init_vlcs(void) { int i, wl_vlc_offs, ct_vlc_offs, sf_vlc_offs, tab_offset; - static const int wl_nb_bits[4] = { 2, 3, 5, 5 }; - static const int wl_nb_codes[4] = { 3, 5, 8, 8 }; + static const uint8_t wl_nb_bits[4] = { 2, 3, 5, 5 }; + static const uint8_t wl_nb_codes[4] = { 3, 5, 8, 8 }; static const uint8_t * const wl_bits[4] = { atrac3p_wl_huff_bits1, atrac3p_wl_huff_bits2, atrac3p_wl_huff_bits3, atrac3p_wl_huff_bits4 @@ -95,8 +95,8 @@ av_cold void ff_atrac3p_init_vlcs(void) atrac3p_wl_huff_xlat1, atrac3p_wl_huff_xlat2, NULL, NULL }; - static const int ct_nb_bits[4] = { 3, 4, 4, 4 }; - static const int ct_nb_codes[4] = { 4, 8, 8, 8 }; + static const uint8_t ct_nb_bits[4] = { 3, 4, 4, 4 }; + static const uint8_t ct_nb_codes[4] = { 4, 8, 8, 8 }; static const uint8_t * const ct_bits[4] = { atrac3p_ct_huff_bits1, atrac3p_ct_huff_bits2, atrac3p_ct_huff_bits2, atrac3p_ct_huff_bits3 @@ -109,8 +109,8 @@ av_cold void ff_atrac3p_init_vlcs(void) NULL, NULL, atrac3p_ct_huff_xlat1, NULL }; - static const int sf_nb_bits[8] = { 9, 9, 9, 9, 6, 6, 7, 7 }; - static const int sf_nb_codes[8] = { 64, 64, 64, 64, 16, 16, 16, 16 }; + static const uint8_t sf_nb_bits[8] = { 9, 9, 9, 9, 6, 6, 7, 7 }; + static const uint8_t sf_nb_codes[8] = { 64, 64, 64, 64, 16, 16, 16, 16 }; static const uint8_t * const sf_bits[8] = { atrac3p_sf_huff_bits1, atrac3p_sf_huff_bits1, atrac3p_sf_huff_bits2, atrac3p_sf_huff_bits3, atrac3p_sf_huff_bits4, atrac3p_sf_huff_bits4, @@ -456,6 +456,10 @@ static int decode_channel_wordlen(GetBitContext *gb, Atrac3pChanUnitCtx *ctx, } else if (chan->fill_mode == 3) { pos = ch_num ? chan->num_coded_vals + chan->split_point : ctx->num_quant_units - chan->split_point; + if (pos > FF_ARRAY_ELEMS(chan->qu_wordlen)) { + av_log(avctx, AV_LOG_ERROR, "Split point beyond array\n"); + pos = FF_ARRAY_ELEMS(chan->qu_wordlen); + } for (i = chan->num_coded_vals; i < pos; i++) chan->qu_wordlen[i] = 1; }