]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/utils: Check bitrate for overflow in get_bit_rate()
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 25 Oct 2020 18:19:54 +0000 (19:19 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 19 Dec 2020 19:07:56 +0000 (20:07 +0100)
Fixes: signed integer overflow: 617890810133996544 * 16 cannot be represented in type 'long'
Fixes: 26565/clusterfuzz-testcase-minimized-ffmpeg_dem_MV_fuzzer-5092054700654592
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/utils.c

index 0226e36ee7f2d92f360ca78e714be23408d7e875..b2313860d043e6bd87f3a869415425c2d954c33f 100644 (file)
@@ -513,7 +513,14 @@ static int64_t get_bit_rate(AVCodecContext *ctx)
         break;
     case AVMEDIA_TYPE_AUDIO:
         bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
-        bit_rate = bits_per_sample ? ctx->sample_rate * (int64_t)ctx->channels * bits_per_sample : ctx->bit_rate;
+        if (bits_per_sample) {
+            bit_rate = ctx->sample_rate * (int64_t)ctx->channels;
+            if (bit_rate > INT64_MAX / bits_per_sample) {
+                bit_rate = 0;
+            } else
+                bit_rate *= bits_per_sample;
+        } else
+            bit_rate = ctx->bit_rate;
         break;
     default:
         bit_rate = 0;