From e52e057cdff0b06a3d075740813ee098364c78c1 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Thu, 19 Nov 2020 15:59:33 +0100 Subject: Fix for issue #159. --- src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/drivers/Xlib') diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx index b20a84cfe..7815fbd79 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx @@ -644,6 +644,16 @@ static void alpha_blend(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, i if (cy < 0) { H += cy; Y -= cy; cy = 0; } if (W + cx > img->data_w()) W = img->data_w() - cx; if (H + cy > img->data_h()) H = img->data_h() - cy; + // don't attempt to read outside the window/offscreen buffer limits + Window root_return; + int x_return, y_return; + unsigned int winW, winH; + unsigned int border_width_return; + unsigned int depth_return; + XGetGeometry(fl_display, fl_window, &root_return, &x_return, &y_return, &winW, + &winH, &border_width_return, &depth_return); + if (X+W > winW) W = winW-X; + if (Y+H > winH) H = winH-Y; if (W <= 0 || H <= 0) return; int ld = img->ld(); if (ld == 0) ld = img->data_w() * img->d(); -- cgit v1.2.3