summaryrefslogtreecommitdiff
path: root/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2020-11-19 15:59:33 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2020-11-19 15:59:48 +0100
commite52e057cdff0b06a3d075740813ee098364c78c1 (patch)
tree7406e637ba3e4345ce8808d891cead22676cf44c /src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
parent3ec51f0b80652d49cade9c5bb46e20c88a88c05c (diff)
Fix for issue #159.
Diffstat (limited to 'src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx')
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx10
1 files changed, 10 insertions, 0 deletions
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();