From 497d03edbf0fa2a4ff7f6fac4e3b8b7cef956414 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Tue, 25 May 2021 14:27:37 +0300 Subject: [PATCH] clients/keyboard: free input_panel_surface Fixes ASan leak: Direct leak of 80 byte(s) in 1 object(s) allocated from: #0 0x7fe7791f4518 in calloc (/lib/x86_64-linux-gnu/libasan.so.5+0xe9518) #1 0x7fe779100892 in zalloc ../../git/wayland/src/wayland-private.h:232 #2 0x7fe779100892 in proxy_create ../../git/wayland/src/wayland-client.c:422 #3 0x7fe779100ede in create_outgoing_proxy ../../git/wayland/src/wayland-client.c:651 #4 0x7fe779100ede in wl_proxy_marshal_array_constructor_versioned ../../git/wayland/src/wayland-client.c:736 #5 0x7fe779101226 in wl_proxy_marshal_constructor ../../git/wayland/src/wayland-client.c:834 #6 0x56428c9bc578 in zwp_input_panel_v1_get_input_panel_surface protocol/input-method-unstable-v1-client-protocol.h:678 #7 0x56428c9c0bbb in set_toplevel ../../git/weston/clients/keyboard.c:965 #8 0x56428c9c0c8d in display_output_handler ../../git/weston/clients/keyboard.c:980 #9 0x56428c9ddead in display_handle_mode ../../git/weston/clients/window.c:5700 #10 0x7fe7786668ed in ffi_call_unix64 (/lib/x86_64-linux-gnu/libffi.so.6+0x68ed) #11 0x7fe7786662be in ffi_call (/lib/x86_64-linux-gnu/libffi.so.6+0x62be) #12 0x7fe779103fac in wl_closure_invoke ../../git/wayland/src/connection.c:1018 #13 0x7fe779100a48 in dispatch_event ../../git/wayland/src/wayland-client.c:1452 #14 0x7fe779101e43 in dispatch_queue ../../git/wayland/src/wayland-client.c:1598 #15 0x7fe779101e43 in wl_display_dispatch_queue_pending ../../git/wayland/src/wayland-client.c:1840 #16 0x56428c9e031c in handle_display_data ../../git/weston/clients/window.c:6211 #17 0x56428c9e2147 in display_run ../../git/weston/clients/window.c:6553 #18 0x56428c9c1559 in main ../../git/weston/clients/keyboard.c:1053 #19 0x7fe77885e09a in __libc_start_main ../csu/libc-start.c:308 #20 0x56428c9bc029 in _start (/home/pq/build/weston-meson/clients/weston-keyboard+0x19029) Signed-off-by: Pekka Paalanen --- clients/keyboard.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clients/keyboard.c b/clients/keyboard.c index 0eedbe75..92525dae 100644 --- a/clients/keyboard.c +++ b/clients/keyboard.c @@ -60,6 +60,7 @@ struct virtual_keyboard { uint32_t surrounding_cursor; struct keyboard *keyboard; bool toplevel; + struct zwp_input_panel_surface_v1 *ips; }; enum key_type { @@ -969,6 +970,7 @@ set_toplevel(struct output *output, struct virtual_keyboard *virtual_keyboard) ZWP_INPUT_PANEL_SURFACE_V1_POSITION_CENTER_BOTTOM); virtual_keyboard->toplevel = true; + virtual_keyboard->ips = ips; } static void @@ -1014,6 +1016,9 @@ keyboard_create(struct virtual_keyboard *virtual_keyboard) static void keyboard_destroy(struct virtual_keyboard *virtual_keyboard) { + if (virtual_keyboard->ips) + zwp_input_panel_surface_v1_destroy(virtual_keyboard->ips); + if (virtual_keyboard->input_panel) zwp_input_panel_v1_destroy(virtual_keyboard->input_panel);