clients: Add more sanity checks to catch destroyed window
authorJeffy Chen <jeffy.chen@rock-chips.com>
Mon, 2 Sep 2019 02:26:09 +0000 (10:26 +0800)
committerDaniel Stone <daniel@fooishbar.org>
Thu, 21 Nov 2019 16:54:38 +0000 (16:54 +0000)
Add a sanity check to touch_handle_down() and data_device_enter() as
what we did for pointer and keyboard.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
clients/window.c

index 3d1e8e4a28c7e3fed327f7257907c7d3c7eb3324..06a7432146a3ed31de0d982038999125b724cfa3 100644 (file)
@@ -3246,6 +3246,11 @@ touch_handle_down(void *data, struct wl_touch *wl_touch,
        float sx = wl_fixed_to_double(x_w);
        float sy = wl_fixed_to_double(y_w);
 
+       if (!surface) {
+               /* down event for a window we've just destroyed */
+               return;
+       }
+
        input->display->serial = serial;
        input->touch_focus = wl_surface_get_user_data(surface);
        if (!input->touch_focus) {
@@ -3601,6 +3606,11 @@ data_device_enter(void *data, struct wl_data_device *data_device,
        float y = wl_fixed_to_double(y_w);
        char **p;
 
+       if (!surface) {
+               /* enter event for a window we've just destroyed */
+               return;
+       }
+
        window = wl_surface_get_user_data(surface);
        input->drag_enter_serial = serial;
        input->drag_focus = window,