diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c index 920cb7d1e9..082019b802 100644 --- a/libavcodec/shorten.c +++ b/libavcodec/shorten.c @@ -269,7 +269,8 @@ static int decode_wave_header(AVCodecContext *avctx, const uint8_t *header, return 0; } -static const int fixed_coeffs[3][3] = { +static const int fixed_coeffs[][3] = { + { 0, 0, 0 }, { 1, 0, 0 }, { 2, -1, 0 }, { 3, -3, 1 } @@ -298,7 +299,12 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel, } else { /* fixed LPC coeffs */ pred_order = command; - coeffs = fixed_coeffs[pred_order - 1]; + if (pred_order > FF_ARRAY_ELEMS(fixed_coeffs)) { + av_log(s->avctx, AV_LOG_ERROR, "invalid pred_order %d\n", + pred_order); + return AVERROR_INVALIDDATA; + } + coeffs = fixed_coeffs[pred_order]; qshift = 0; }