]> git.sesse.net Git - ffmpeg/commitdiff
avutil/mathematics: Fix undefined negation in av_compare_ts()
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 31 Jan 2021 14:51:40 +0000 (15:51 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Wed, 10 Feb 2021 11:28:29 +0000 (12:28 +0100)
Fixes: negation of -9223372036854775808 cannot be represented in type 'int64_t' (aka 'long'); cast to an unsigned type to negate this value to itself
Fixes: 29437/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-4748510022991872
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavutil/mathematics.c

index da0fc17b2e655a33d35cb5711d55560f8406f8d2..2de2b39da0892e7f2e8acde1f4eaee3c42e99af4 100644 (file)
@@ -148,7 +148,7 @@ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
 {
     int64_t a = tb_a.num * (int64_t)tb_b.den;
     int64_t b = tb_b.num * (int64_t)tb_a.den;
-    if ((FFABS(ts_a)|a|FFABS(ts_b)|b) <= INT_MAX)
+    if ((FFABS64U(ts_a)|a|FFABS64U(ts_b)|b) <= INT_MAX)
         return (ts_a*a > ts_b*b) - (ts_a*a < ts_b*b);
     if (av_rescale_rnd(ts_a, a, b, AV_ROUND_DOWN) < ts_b)
         return -1;