From 0af4affd0b838f31e8ea61a32a157fafdc563f7f Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 3 Oct 2022 11:35:59 +0200 Subject: [PATCH] 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(). --- types/wlr_screencopy_v1.c | 10 ++++++---- 1 file 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; }