From aac75ddcbf34513df06ba06b71b512fc86e45eda Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Wed, 19 Jul 2023 13:10:31 +0200 Subject: [PATCH] screencopy: guard region buffer values in frameDamage --- src/protocols/Screencopy.cpp | 6 ++++++ 1 file changed, 6 insertions(+) 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));