tests: check for NULL surface in keyboard and pointer handlers
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@collabora.co.uk>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
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 @@
{
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->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 @@
{
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->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