From cf86ec9ed0682a90b2735e14e1be964d53f9cdab Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Tue, 17 Feb 2026 16:10:49 +0100 Subject: [PATCH] [gdi] fix handling of empty regions Do not abort if an empty update region is found, ignore it. --- libfreerdp/gdi/clipping.c | 4 ++-- libfreerdp/gdi/region.c | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libfreerdp/gdi/clipping.c b/libfreerdp/gdi/clipping.c index 62a7644ad..09288f4cb 100644 --- a/libfreerdp/gdi/clipping.c +++ b/libfreerdp/gdi/clipping.c @@ -101,7 +101,7 @@ BOOL gdi_ClipCoords(HGDI_DC hdc, INT32* x, INT32* y, INT32* w, INT32* h, INT32* if (!gdi_RgnToRect(hdc->clip, &clip)) return TRUE; if (!gdi_CRgnToRect(0, 0, hBmp->width, hBmp->height, &bmp)) - return FALSE; + return TRUE; if (clip.left < bmp.left) clip.left = bmp.left; @@ -123,7 +123,7 @@ BOOL gdi_ClipCoords(HGDI_DC hdc, INT32* x, INT32* y, INT32* w, INT32* h, INT32* } if (!gdi_CRgnToRect(*x, *y, *w, *h, &coords)) - return FALSE; + return TRUE; if (coords.right >= clip.left && coords.left <= clip.right && coords.bottom >= clip.top && coords.top <= clip.bottom) diff --git a/libfreerdp/gdi/region.c b/libfreerdp/gdi/region.c index fba68c71b..6837ee111 100644 --- a/libfreerdp/gdi/region.c +++ b/libfreerdp/gdi/region.c @@ -655,6 +655,16 @@ inline BOOL gdi_InvalidateRegion(HGDI_DC hdc, INT32 x, INT32 y, INT32 w, INT32 h if (!gdi_SetRgn(&cinvalid[hdc->hwnd->ninvalid++], x, y, w, h)) return FALSE; + if (!gdi_CRgnToRect(x, y, w, h, &rgn)) + { + invalid->x = 0; + invalid->y = 0; + invalid->w = 0; + invalid->h = 0; + invalid->null = TRUE; + return TRUE; + } + if (invalid->null) { invalid->x = x; @@ -665,8 +675,6 @@ inline BOOL gdi_InvalidateRegion(HGDI_DC hdc, INT32 x, INT32 y, INT32 w, INT32 h return TRUE; } - if (!gdi_CRgnToRect(x, y, w, h, &rgn)) - return FALSE; if (!gdi_RgnToRect(invalid, &inv)) return FALSE;