[PATCH weston] tests: check for NULL surface in keyboard and pointer handlers

Bryce Harrington bryce at osg.samsung.com
Thu Apr 21 19:06:49 UTC 2016


On Thu, Apr 21, 2016 at 05:12:47PM +0300, Pekka Paalanen wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> When a test destroys a wl_surface, it is still possible to get events
> referring to the destroyed surface. The surface in such cases will be
> NULL.
> 
> Handle NULL surface gracefully in keyboard and pointer enter/leave
> handlers. Touch-down handler is already NULL-safe.
> 
> This fixes a SEGV in a test I am writing for wp_viewport.
> 
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

LGTM,
Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>

> ---
>  tests/weston-test-client-helper.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c
> index 3f7ff2b..cc2544e 100644
> --- a/tests/weston-test-client-helper.c
> +++ b/tests/weston-test-client-helper.c
> @@ -132,7 +132,11 @@ pointer_handle_enter(void *data, struct wl_pointer *wl_pointer,
>  {
>  	struct pointer *pointer = data;
>  
> -	pointer->focus = wl_surface_get_user_data(wl_surface);
> +	if (wl_surface)
> +		pointer->focus = wl_surface_get_user_data(wl_surface);
> +	else
> +		pointer->focus = NULL;
> +
>  	pointer->x = wl_fixed_to_int(x);
>  	pointer->y = wl_fixed_to_int(y);
>  
> @@ -149,7 +153,7 @@ pointer_handle_leave(void *data, struct wl_pointer *wl_pointer,
>  	pointer->focus = NULL;
>  
>  	fprintf(stderr, "test-client: got pointer leave, surface %p\n",
> -		wl_surface_get_user_data(wl_surface));
> +		wl_surface ? wl_surface_get_user_data(wl_surface) : NULL);
>  }
>  
>  static void
> @@ -243,7 +247,10 @@ keyboard_handle_enter(void *data, struct wl_keyboard *wl_keyboard,
>  {
>  	struct keyboard *keyboard = data;
>  
> -	keyboard->focus = wl_surface_get_user_data(wl_surface);
> +	if (wl_surface)
> +		keyboard->focus = wl_surface_get_user_data(wl_surface);
> +	else
> +		keyboard->focus = NULL;
>  
>  	fprintf(stderr, "test-client: got keyboard enter, surface %p\n",
>  		keyboard->focus);
> @@ -258,7 +265,7 @@ keyboard_handle_leave(void *data, struct wl_keyboard *wl_keyboard,
>  	keyboard->focus = NULL;
>  
>  	fprintf(stderr, "test-client: got keyboard leave, surface %p\n",
> -		wl_surface_get_user_data(wl_surface));
> +		wl_surface ? wl_surface_get_user_data(wl_surface) : NULL);
>  }
>  
>  static void
> -- 
> 2.7.3
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list