summaryrefslogtreecommitdiff
blob: cff1f72ca5ca62b2ce21c7c1c1a5706d84810173 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
From 7d950f3dac6cca62635d5e4ff2af33b35372f6db Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Sat, 19 Mar 2022 14:00:43 +0100
Subject: [PATCH] tinywl: don't crash when there is no keyboard

Running with WLR_BACKENDS=headless, there is no keyboard device.
Avoid crashes like so:

    ../tinywl/tinywl.c:136:2: runtime error: member access within null pointer of type 'struct wlr_keyboard'
    ../tinywl/tinywl.c:136:2: runtime error: member access within null pointer of type 'struct wlr_keyboard'
    AddressSanitizer:DEADLYSIGNAL
    =================================================================
    ==331107==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000120 (pc 0x556ed03e4e99 bp 0x7ffce834bc10 sp 0x7ffce834bbb0 T0)
    ==331107==The signal is caused by a READ memory access.
    ==331107==Hint: address points to the zero page.
        #0 0x556ed03e4e99 in focus_view ../tinywl/tinywl.c:136
        #1 0x556ed03eb3be in xdg_toplevel_map ../tinywl/tinywl.c:603
        #2 0x7f75d6f768db in wlr_signal_emit_safe ../util/signal.c:29
        #3 0x7f75d6e9cac7 in xdg_surface_role_commit ../types/xdg_shell/wlr_xdg_surface.c:315
        #4 0x7f75d6eb6944 in surface_commit_state ../types/wlr_compositor.c:466
        #5 0x7f75d6eb7b02 in surface_handle_commit ../types/wlr_compositor.c:523
        #6 0x7f75d5714d49  (/usr/lib/libffi.so.8+0x6d49)
        #7 0x7f75d5714266  (/usr/lib/libffi.so.8+0x6266)
        #8 0x7f75d68cb322  (/usr/lib/libwayland-server.so.0+0xd322)
        #9 0x7f75d68c65cb  (/usr/lib/libwayland-server.so.0+0x85cb)
        #10 0x7f75d68c91c9 in wl_event_loop_dispatch (/usr/lib/libwayland-server.so.0+0xb1c9)
        #11 0x7f75d68c6d36 in wl_display_run (/usr/lib/libwayland-server.so.0+0x8d36)
        #12 0x556ed03eef55 in main ../tinywl/tinywl.c:905
        #13 0x7f75d5d2330f in __libc_start_call_main (/usr/lib/libc.so.6+0x2d30f)
        #14 0x7f75d5d233c0 in __libc_start_main@GLIBC_2.2.5 (/usr/lib/libc.so.6+0x2d3c0)
        #15 0x556ed03e46e4 in _start (/home/simon/src/wlroots/build/tinywl/tinywl+0x136e4)
---
 tinywl/tinywl.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tinywl/tinywl.c b/tinywl/tinywl.c
index dd442aac..8796e9df 100644
--- a/tinywl/tinywl.c
+++ b/tinywl/tinywl.c
@@ -130,8 +130,10 @@ static void focus_view(struct tinywl_view *view, struct wlr_surface *surface) {
 	 * track of this and automatically send key events to the appropriate
 	 * clients without additional work on your part.
 	 */
-	wlr_seat_keyboard_notify_enter(seat, view->xdg_surface->surface,
-		keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers);
+	if (keyboard != NULL) {
+		wlr_seat_keyboard_notify_enter(seat, view->xdg_surface->surface,
+			keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers);
+	}
 }
 
 static void keyboard_handle_modifiers(
-- 
2.36.1