summaryrefslogtreecommitdiff
path: root/src/protocols/Screencopy.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-07-19 13:10:31 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-07-19 13:10:41 +0200
commitaac75ddcbf34513df06ba06b71b512fc86e45eda (patch)
treeb39f941e7d214a50e40dfeaac99ab68a685556d9 /src/protocols/Screencopy.cpp
parent5cd5631fb226e315a233473c961714ed1c73840f (diff)
screencopy: guard region buffer values in frameDamage
Diffstat (limited to 'src/protocols/Screencopy.cpp')
-rw-r--r--src/protocols/Screencopy.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp
index 244ad66f..801b4615 100644
--- a/src/protocols/Screencopy.cpp
+++ b/src/protocols/Screencopy.cpp
@@ -405,6 +405,12 @@ void CScreencopyProtocolManager::sendFrameDamage(SScreencopyFrame* frame) {
PIXMAN_DAMAGE_FOREACH(&frame->pMonitor->lastFrameDamage) {
const auto RECT = &RECTSARR[i];
+
+ if (frame->buffer->width < 1 || frame->buffer->height < 1 || frame->buffer->width - RECT->x1 < 1 || frame->buffer->height - RECT->y1 < 1) {
+ Debug::log(ERR, "[sc] Failed to send damage");
+ break;
+ }
+
zwlr_screencopy_frame_v1_send_damage(frame->resource, std::clamp(RECT->x1, 0, frame->buffer->width), std::clamp(RECT->y1, 0, frame->buffer->height),
std::clamp(RECT->x2 - RECT->x1, 0, frame->buffer->width - RECT->x1),
std::clamp(RECT->y2 - RECT->y1, 0, frame->buffer->height - RECT->y1));