From fd734608c3c40a1a93c6becaced69ddd04d4cf9a Mon Sep 17 00:00:00 2001 From: Harish Krupo Date: Sun, 8 Jul 2018 12:53:00 +0530 Subject: [PATCH] egl: Fix missing clamping in eglSetDamageRegionKHR MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Clamp the x and y co-ordinates of the rectangles. v2: Clamp width/height after converting to co-ordinates (Ilia Merkin) Signed-off-by: Harish Krupo Reviewed-by: Qiang Yu Reviewed-by: Tapani Pälli Reviewed-by: Eric Engestrom --- src/egl/main/eglapi.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index c1103491191..deb479b6d56 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -1320,9 +1320,7 @@ eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface, } /** - * If the width of the passed rect is greater than the surface's - * width then it is clamped to the width of the surface. Same with - * height. + * Clamp the rectangles so that they lie within the surface. */ static void @@ -1334,17 +1332,16 @@ _eglSetDamageRegionKHRClampRects(_EGLDisplay* disp, _EGLSurface* surf, EGLint surf_width = surf->Width; for (i = 0; i < (4 * n_rects); i += 4) { - EGLint x, y, rect_width, rect_height; - x = rects[i]; - y = rects[i + 1]; - rect_width = rects[i + 2]; - rect_height = rects[i + 3]; - - if (rect_width > surf_width - x) - rects[i + 2] = surf_width - x; - - if (rect_height > surf_height - y) - rects[i + 3] = surf_height - y; + EGLint x1, y1, x2, y2; + x1 = rects[i]; + y1 = rects[i + 1]; + x2 = rects[i + 2] + x1; + y2 = rects[i + 3] + y1; + + rects[i] = CLAMP(x1, 0, surf_width); + rects[i + 1] = CLAMP(y1, 0, surf_height); + rects[i + 2] = CLAMP(x2, 0, surf_width) - rects[i]; + rects[i + 3] = CLAMP(y2, 0, surf_height) - rects[i + 1]; } } -- 2.30.2