diff options
author | Jorge E. Moreira <jemoreira@google.com> | 2021-07-13 16:51:24 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-07-13 16:51:24 +0000 |
commit | f96c420f0d332c82cad796d54c86926d49329c12 (patch) | |
tree | 2bb892d71caf976167223d81e692319771f72860 | |
parent | 959630e21a4893deb30e6dc6a1b6efbfa04a1d8b (diff) | |
parent | 5480c1d2817b9a564e69d3c0c151c6411ae4909b (diff) | |
download | libvpx-f96c420f0d332c82cad796d54c86926d49329c12.tar.gz |
Avoid overflow in calc_iframe_target_size am: 5480c1d281android-12.1.0_r9android-12.1.0_r8android-12.1.0_r7android-12.1.0_r22android-12.1.0_r21android-12.1.0_r20android-12.1.0_r19android-12.1.0_r11android-12.1.0_r10android12L-devandroid12-qpr3-s7-releaseandroid12-qpr3-s6-releaseandroid12-qpr3-s5-releaseandroid12-qpr3-s4-releaseandroid12-qpr3-s3-releaseandroid12-qpr3-s2-releaseandroid12-qpr3-s1-releaseandroid12-qpr3-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/libvpx/+/15148150
Change-Id: I64a5c12302d7a4e08011c66a80eeb2c89d95ac6c
-rw-r--r-- | README.version | 1 | ||||
-rw-r--r-- | libvpx/vp8/encoder/ratectrl.c | 8 |
2 files changed, 7 insertions, 2 deletions
diff --git a/README.version b/README.version index 7e8c25da3..f555bcc48 100644 --- a/README.version +++ b/README.version @@ -11,3 +11,4 @@ Local Modifications: 5e065cf9d vp8/{ratectrl,onyx_if}: fix some signed integer overflows 5eab093a7 vp9_ratectrl: fix some signed integer overflows baefbe85d Cap target bitrate to raw rate internally + 5f345a924 Avoid overflow in calc_iframe_target_size diff --git a/libvpx/vp8/encoder/ratectrl.c b/libvpx/vp8/encoder/ratectrl.c index d8d55fce2..d93fb59a4 100644 --- a/libvpx/vp8/encoder/ratectrl.c +++ b/libvpx/vp8/encoder/ratectrl.c @@ -349,8 +349,12 @@ static void calc_iframe_target_size(VP8_COMP *cpi) { } if (cpi->oxcf.rc_max_intra_bitrate_pct) { - unsigned int max_rate = - cpi->per_frame_bandwidth * cpi->oxcf.rc_max_intra_bitrate_pct / 100; + unsigned int max_rate; + // This product may overflow unsigned int + uint64_t product = cpi->per_frame_bandwidth; + product *= cpi->oxcf.rc_max_intra_bitrate_pct; + product /= 100; + max_rate = (unsigned int)VPXMIN(INT_MAX, product); if (target > max_rate) target = max_rate; } |