diff --git a/libavcodec/aic.c b/libavcodec/aic.c index e46c00349a5b45d0bee94f256fcc0c95a89c5f8c..f295249f30447f11a2fafeb89662f6faa65b3bd4 100644 --- a/libavcodec/aic.c +++ b/libavcodec/aic.c @@ -215,12 +215,14 @@ static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst, idx = -1; do { GET_CODE(val, skip_type, skip_bits); + if (val < 0) + return AVERROR_INVALIDDATA; idx += val + 1; if (idx >= num_coeffs) break; GET_CODE(val, coeff_type, coeff_bits); val++; - if (val >= 0x10000) + if (val >= 0x10000 || val < 0) return AVERROR_INVALIDDATA; dst[scan[idx]] = val; } while (idx < num_coeffs - 1); @@ -230,7 +232,7 @@ static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst, for (mb = 0; mb < slice_width; mb++) { for (idx = 0; idx < num_coeffs; idx++) { GET_CODE(val, coeff_type, coeff_bits); - if (val >= 0x10000) + if (val >= 0x10000 || val < 0) return AVERROR_INVALIDDATA; dst[scan[idx]] = val; }