]> granicus.if.org Git - libvpx/commitdiff
vp8,calc_pframe_target_size: fix integer overflow
authorJames Zern <jzern@google.com>
Mon, 8 Nov 2021 20:57:12 +0000 (12:57 -0800)
committerJames Zern <jzern@google.com>
Mon, 8 Nov 2021 21:09:21 +0000 (13:09 -0800)
this is similar to the fix for calc_iframe_target_size:
5f345a924 Avoid overflow in calc_iframe_target_size

Bug: chromium:1264506
Change-Id: I2f0e161cf9da59ca0724692d581f1594c8098ebb

vp8/encoder/ratectrl.c

index d591680ce382984df7054eb29b74ed6289fe0765..3df34009ab0e4163c8a93b91c7971ce310accd49 100644 (file)
@@ -781,6 +781,7 @@ static void calc_pframe_target_size(VP8_COMP *cpi) {
         }
       } else {
         int percent_high = 0;
+        int64_t target = cpi->this_frame_target;
 
         if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) &&
             (cpi->buffer_level > cpi->oxcf.optimal_buffer_level)) {
@@ -798,7 +799,9 @@ static void calc_pframe_target_size(VP8_COMP *cpi) {
           percent_high = 0;
         }
 
-        cpi->this_frame_target += (cpi->this_frame_target * percent_high) / 200;
+        target += (target * percent_high) / 200;
+        target = VPXMIN(target, INT_MAX);
+        cpi->this_frame_target = (int)target;
 
         /* Are we allowing control of active_worst_allowed_q according
          * to buffer level.