X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fpixlet.c;h=0dfd5edbf7e7a5a068ca6a043f52aaa3de8f3d22;hb=d32ebce8fd79bb859ba4a04c92470a052f2aafa6;hp=d0313051550ca8b902aabbd8269e4809cd586524;hpb=b010843594fee88a791185b83684e0e725007b7b;p=ffmpeg diff --git a/libavcodec/pixlet.c b/libavcodec/pixlet.c index d0313051550..0dfd5edbf7e 100644 --- a/libavcodec/pixlet.c +++ b/libavcodec/pixlet.c @@ -229,6 +229,8 @@ static int read_high_coeffs(AVCodecContext *avctx, uint8_t *src, int16_t *dst, i cnt1 = get_bits(b, nbits); } else { pfx = 14 + ((((uint64_t)(value - 14)) >> 32) & (value - 14)); + if (pfx < 1 || pfx > 25) + return AVERROR_INVALIDDATA; cnt1 *= (1 << pfx) - 1; shbits = show_bits(b, pfx); if (shbits <= 1) { @@ -256,7 +258,7 @@ static int read_high_coeffs(AVCodecContext *avctx, uint8_t *src, int16_t *dst, i j = 0; dst += stride; } - state += (int64_t)d * yflag - (d * state >> 8); + state += (int64_t)d * (uint64_t)yflag - ((int64_t)(d * (uint64_t)state) >> 8); flag = 0;