avcodec/wavpack: Fix runtime error: signed integer overflow: 2147483642 + 512 cannot...
authorMichael Niedermayer <michael@niedermayer.cc>
Wed, 10 May 2017 21:28:21 +0000 (23:28 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 13 May 2017 16:06:11 +0000 (18:06 +0200)
Fixed: 1453/clusterfuzz-testcase-minimized-5024976874766336

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/targets/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/wavpack.c

index d2ba97e..87c065c 100644 (file)
@@ -433,8 +433,8 @@ static inline int wv_unpack_stereo(WavpackFrameContext *s, GetBitContext *gb,
                     L2 = L + ((s->decorr[i].weightA * (int64_t)A + 512) >> 10);
                     R2 = R + ((s->decorr[i].weightB * (int64_t)B + 512) >> 10);
                 } else {
-                    L2 = L + ((s->decorr[i].weightA * A + 512) >> 10);
-                    R2 = R + ((s->decorr[i].weightB * B + 512) >> 10);
+                    L2 = L + ((int)(s->decorr[i].weightA * A + 512U) >> 10);
+                    R2 = R + ((int)(s->decorr[i].weightB * B + 512U) >> 10);
                 }
                 if (A && L)
                     s->decorr[i].weightA -= ((((L ^ A) >> 30) & 2) - 1) * s->decorr[i].delta;