diff --git a/libavcodec/wmaprodec.c b/libavcodec/wmaprodec.c index b0d3edeb9a768f01ad3833805838b6cc0f8013e2..55a48078dbd2b7c09595b6f6fe42e9f3139318e2 100644 --- a/libavcodec/wmaprodec.c +++ b/libavcodec/wmaprodec.c @@ -1825,8 +1825,13 @@ static av_cold int xma_decode_init(AVCodecContext *avctx) XMADecodeCtx *s = avctx->priv_data; int i, ret; - for (i = 0; i < avctx->channels / 2; i++) { + if (avctx->channels <= 0 || avctx->channels > 8) + return AVERROR_INVALIDDATA; + + for (i = 0; i < (avctx->channels + 1) / 2; i++) { ret = decode_init(&s->xma[i], avctx); + if (ret < 0) + return ret; s->frames[i] = av_frame_alloc(); if (!s->frames[i]) return AVERROR(ENOMEM);