From: Pekka Paalanen Date: Mon, 28 Nov 2011 14:13:57 +0000 (+0200) Subject: window: fix segfault in window_handle_key() X-Git-Tag: upstream/0.1.8~3180 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a03a93c6ea0564087e4bd66108e0e01cb2522bdc;p=profile%2Fivi%2Fweston-ivi-shell.git window: fix segfault in window_handle_key() When a window destroyed, if any input had the window in keyboard focus, the keyboard focus is reset to NULL. A new keyboard focus is set only, if the user clicks something. If the user presses a key instead of clicking, the key press event is sent to the client which has NULL keyboard focus, triggering a segfault in window_handle_key(). Fix the segfault by ignoring the key event, if there is no target window. I triggered this segfault by clicking the unlock dialog away, and then pressing a key. Signed-off-by: Pekka Paalanen --- diff --git a/clients/window.c b/clients/window.c index 1c8b9ad..5324795 100644 --- a/clients/window.c +++ b/clients/window.c @@ -1314,11 +1314,11 @@ window_handle_key(void *data, struct wl_input_device *input_device, { struct input *input = data; struct window *window = input->keyboard_focus; - struct display *d = window->display; + struct display *d = input->display; uint32_t code, sym, level; code = key + d->xkb->min_key_code; - if (window->keyboard_device != input) + if (!window || window->keyboard_device != input) return; level = 0; @@ -1394,7 +1394,6 @@ window_handle_keyboard_focus(void *data, struct display *d = input->display; uint32_t *k, *end; - window = input->keyboard_focus; if (window) { window->keyboard_device = NULL; if (window->keyboard_focus_handler)