diff options
author | Simon Ser <contact@emersion.fr> | 2022-10-03 11:35:59 +0200 |
---|---|---|
committer | Alexander Orzechowski <orzechowski.alexander@gmail.com> | 2022-10-03 17:06:38 +0000 |
commit | 0af4affd0b838f31e8ea61a32a157fafdc563f7f (patch) | |
tree | 34bb148749bf5be3d737c33496c2a50e9c3f0cda | |
parent | 0613fb0159e7bdc429381212109b78ad200fc104 (diff) |
screencopy-v1: fix frame_shm_copy() error path
Don't call wlr_renderer_end() if wlr_renderer_begin_with_buffer()
failed. This will result in an abort().
-rw-r--r-- | types/wlr_screencopy_v1.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/types/wlr_screencopy_v1.c b/types/wlr_screencopy_v1.c index 32df6c56..530cacb5 100644 --- a/types/wlr_screencopy_v1.c +++ b/types/wlr_screencopy_v1.c @@ -209,16 +209,18 @@ static bool frame_shm_copy(struct wlr_screencopy_frame_v1 *frame, } uint32_t renderer_flags = 0; - bool ok; - ok = wlr_renderer_begin_with_buffer(renderer, src_buffer); - ok = ok && wlr_renderer_read_pixels(renderer, format, &renderer_flags, + bool ok = false; + if (!wlr_renderer_begin_with_buffer(renderer, src_buffer)) { + goto out; + } + ok = wlr_renderer_read_pixels(renderer, format, &renderer_flags, stride, width, height, x, y, 0, 0, data); wlr_renderer_end(renderer); *flags = renderer_flags & WLR_RENDERER_READ_PIXELS_Y_INVERT ? ZWLR_SCREENCOPY_FRAME_V1_FLAGS_Y_INVERT : 0; +out: wlr_buffer_end_data_ptr_access(frame->buffer); - return ok; } |