Commit f20ffd491c for aom
commit f20ffd491c629ded91e7b12c9dca1b752ac53cd7
Author: Cheng Chen <chengchen@google.com>
Date: Fri Apr 17 16:28:49 2026 -0700
Fix an integer overflow in target bits calculation
BUG=aomedia:503197490
Change-Id: I65eaba5e6d48da47ca0e67854ac0cff843e4ddea
diff --git a/av1/encoder/ratectrl.c b/av1/encoder/ratectrl.c
index dd2bd1bac5..f68c78f4ec 100644
--- a/av1/encoder/ratectrl.c
+++ b/av1/encoder/ratectrl.c
@@ -505,10 +505,11 @@ void av1_primary_rc_init(const AV1EncoderConfig *oxcf,
p_rc->rate_correction_factors[KF_STD] = 1.0;
p_rc->bits_off_target = p_rc->starting_buffer_level;
- p_rc->rolling_target_bits = AOMMAX(
- 1, (int)(oxcf->rc_cfg.target_bandwidth / oxcf->input_cfg.init_framerate));
- p_rc->rolling_actual_bits = AOMMAX(
- 1, (int)(oxcf->rc_cfg.target_bandwidth / oxcf->input_cfg.init_framerate));
+ const double bits_per_frame =
+ oxcf->rc_cfg.target_bandwidth / oxcf->input_cfg.init_framerate;
+ p_rc->rolling_target_bits =
+ AOMMAX(1, bits_per_frame > INT_MAX ? INT_MAX : (int)bits_per_frame);
+ p_rc->rolling_actual_bits = p_rc->rolling_target_bits;
}
void av1_rc_init(const AV1EncoderConfig *oxcf, RATE_CONTROL *rc) {
diff --git a/test/encode_api_test.cc b/test/encode_api_test.cc
index 259fb34a07..239d29af1c 100644
--- a/test/encode_api_test.cc
+++ b/test/encode_api_test.cc
@@ -2408,4 +2408,22 @@ TEST(EncodeAPI, DynamicSvcTemporalIssue502735235) {
ASSERT_EQ(aom_codec_destroy(&codec), AOM_CODEC_OK);
}
+TEST(EncodeAPI, Buganizer503197490) {
+ aom_codec_iface_t *iface = aom_codec_av1_cx();
+ aom_codec_enc_cfg_t cfg;
+ ASSERT_EQ(aom_codec_enc_config_default(iface, &cfg, AOM_USAGE_REALTIME),
+ AOM_CODEC_OK);
+
+ cfg.g_w = 640;
+ cfg.g_h = 360;
+ cfg.g_timebase.num = 570;
+ cfg.g_timebase.den = 30;
+ cfg.rc_end_usage = AOM_CBR;
+ cfg.rc_target_bitrate = 1728882; // 1728882000 bits/s
+
+ aom_codec_ctx_t codec;
+ ASSERT_EQ(aom_codec_enc_init(&codec, iface, &cfg, 0), AOM_CODEC_OK);
+ ASSERT_EQ(aom_codec_destroy(&codec), AOM_CODEC_OK);
+}
+
} // namespace