[gnome-shell/gnome-3-28] st: Avoid integer overflow on unpremultiply



commit b29e243fec971b6b93a1f76ff1996023d3f47e21
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Nov 22 20:41:44 2018 +0100

    st: Avoid integer overflow on unpremultiply
    
    When computing the effective border color, we operate on colors with
    premultiplied alpha to simplify the calculations, then unpremultiply
    the result. However we miss a bounds check in the last check, so any
    color component can overflow the allowed maximum of 0xff and shift the
    result in unexpected ways.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/305
    
    (cherry picked from commit 925a25da17986bf60f61bb4e06ec22e2c59fa14f)

 src/st/st-theme-node-drawing.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
---
diff --git a/src/st/st-theme-node-drawing.c b/src/st/st-theme-node-drawing.c
index 2123cc487..3db9f8fad 100644
--- a/src/st/st-theme-node-drawing.c
+++ b/src/st/st-theme-node-drawing.c
@@ -229,9 +229,9 @@ unpremultiply (ClutterColor *color)
 {
   if (color->alpha != 0)
     {
-      color->red = (color->red * 255 + 127) / color->alpha;
-      color->green = (color->green * 255 + 127) / color->alpha;
-      color->blue = (color->blue * 255 + 127) / color->alpha;
+      color->red = MIN((color->red * 255 + 127) / color->alpha, 255);
+      color->green = MIN((color->green * 255 + 127) / color->alpha, 255);
+      color->blue = MIN((color->blue * 255 + 127) / color->alpha, 255);
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]