mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-03-13 09:00:40 +08:00
avcodec/adpcm: fix integer overflow in N64
Fixes: signed integer overflow: 1077919680 + 1077936128 cannot be represented in type 'int' Fixes: 471686763/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_ADPCM_N64_DEC_fuzzer-6493712281829376 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -2688,7 +2688,8 @@ static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
||||
int16_t *sf_out = &out[j*8];
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
int sample, delta = 0;
|
||||
int sample;
|
||||
unsigned delta = 0;
|
||||
|
||||
for (int o = 0; o < order; o++)
|
||||
delta += coefs[o*8 + i] * hist[(8 - order) + o];
|
||||
@@ -2699,7 +2700,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
||||
}
|
||||
|
||||
sample = sf_codes[i] * 2048;
|
||||
sample = (sample + delta) / 2048;
|
||||
sample = (int)(sample + delta) / 2048;
|
||||
sample = av_clip_int16(sample);
|
||||
sf_out[i] = sample;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user