diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-07-19 13:10:31 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-07-19 13:10:41 +0200 |
| commit | aac75ddcbf34513df06ba06b71b512fc86e45eda (patch) | |
| tree | b39f941e7d214a50e40dfeaac99ab68a685556d9 /src/protocols/Screencopy.cpp | |
| parent | 5cd5631fb226e315a233473c961714ed1c73840f (diff) | |
screencopy: guard region buffer values in frameDamage
Diffstat (limited to 'src/protocols/Screencopy.cpp')
| -rw-r--r-- | src/protocols/Screencopy.cpp | 6 |
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)); |
