xwayland: Fix crash when run with no input device
authorTom Hochstein <tom.hochstein@nxp.com>
Tue, 1 Nov 2016 19:14:00 +0000 (14:14 -0500)
committerDaniel Stone <daniels@collabora.com>
Wed, 16 Nov 2016 16:44:20 +0000 (16:44 +0000)
Starting an xterm with no input device led to a crash
because weston_wm_pick_seat() was returning garbage and
weston_wm_selection_init() was trying to use the garbage.

Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
xwayland/selection.c
xwayland/window-manager.c

index 641ac49..9668d17 100644 (file)
@@ -709,6 +709,8 @@ weston_wm_selection_init(struct weston_wm *wm)
                                          wm->atom.clipboard, mask);
 
        seat = weston_wm_pick_seat(wm);
+       if (seat == NULL)
+               return;
        wm->selection_listener.notify = weston_wm_set_selection;
        wl_signal_add(&seat->selection_signal, &wm->selection_listener);
 
index b6a3aa2..c0eb7b0 100644 (file)
@@ -1306,8 +1306,10 @@ weston_wm_handle_reparent_notify(struct weston_wm *wm, xcb_generic_event_t *even
 struct weston_seat *
 weston_wm_pick_seat(struct weston_wm *wm)
 {
-       return container_of(wm->server->compositor->seat_list.next,
-                           struct weston_seat, link);
+       struct wl_list *seats = wm->server->compositor->seat_list.next;
+       if (wl_list_empty(seats))
+               return NULL;
+       return container_of(seats, struct weston_seat, link);
 }
 
 static struct weston_seat *