diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-11-19 15:59:33 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-11-19 15:59:48 +0100 |
| commit | e52e057cdff0b06a3d075740813ee098364c78c1 (patch) | |
| tree | 7406e637ba3e4345ce8808d891cead22676cf44c /src/drivers/Xlib | |
| parent | 3ec51f0b80652d49cade9c5bb46e20c88a88c05c (diff) | |
Fix for issue #159.
Diffstat (limited to 'src/drivers/Xlib')
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 10 |
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(); |
