From: Emilio Pozuelo Monfort <[email protected]> The noop-renderer doesn't read buffer contents, which means bad buffers go undetected. Thus, read the buffer contents just for the purpose of triggering SIGBUS (and having the client killed).
Fixed bad-buffer test when run against the headless backend. Signed-off-by: Emilio Pozuelo Monfort <[email protected]> --- src/noop-renderer.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/noop-renderer.c b/src/noop-renderer.c index cf1a7f2..5da0b20 100644 --- a/src/noop-renderer.c +++ b/src/noop-renderer.c @@ -23,6 +23,7 @@ #include "config.h" #include <stdlib.h> +#include <string.h> #include "compositor.h" @@ -50,15 +51,31 @@ static void noop_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer) { struct wl_shm_buffer *shm_buffer; + uint8_t *data; + uint32_t size, width, height, stride; if (!buffer) return; shm_buffer = wl_shm_buffer_get(buffer->resource); + data = wl_shm_buffer_get_data(shm_buffer); + stride = wl_shm_buffer_get_stride(shm_buffer); + width = wl_shm_buffer_get_width(shm_buffer); + height = wl_shm_buffer_get_height(shm_buffer); + size = stride * height; + + /* Access the buffer data to make sure the buffer's client gets killed + * if the buffer size is invalid. This makes the bad_buffer test pass. + * This can be removed if we start reading the buffer contents + * somewhere else, e.g. in repaint_output(). */ + wl_shm_buffer_begin_access(shm_buffer); + memset(data, 0, size); + wl_shm_buffer_end_access(shm_buffer); + buffer->shm_buffer = shm_buffer; - buffer->width = wl_shm_buffer_get_width(shm_buffer); - buffer->height = wl_shm_buffer_get_height(shm_buffer); + buffer->width = width; + buffer->height = height; } static void -- 1.8.5.3 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
