On Thu,  6 Feb 2014 12:30:33 +0100
Emilio Pozuelo Monfort <poch...@gmail.com> wrote:

> From: Emilio Pozuelo Monfort <emilio.pozu...@collabora.co.uk>
> 
> 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 <emilio.pozu...@collabora.co.uk>
> ---
>  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

Hi,

heh, nice, although *writing* to the client's buffer here is very
naughty. ;-)

I'd prefer a reading loop here instead of memset.


Thanks,
pq
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to