From 40850267d4bf515c94850de40469baeb0e7fb1df Mon Sep 17 00:00:00 2001 From: Benjamin Schaaf Date: Sat, 3 Oct 2020 16:07:36 +1000 Subject: [PATCH] Fix leak in level_keyboard_new xkb_keymap_get_as_string requires that the string it returns is freed by the caller. --- eek/eek-keyboard.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index 7d000480..16a6198c 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -64,8 +64,8 @@ level_keyboard_new (struct squeek_layout *layout) xkb_context_unref(context); keyboard->keymap = keymap; - keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); - keyboard->keymap_len = strlen(keymap_str) + 1; + char * xkb_keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1); + keyboard->keymap_len = strlen(xkb_keymap_str) + 1; g_autofree char *path = strdup("/eek_keymap-XXXXXX"); char *r = &path[strlen(path) - 6]; @@ -89,7 +89,8 @@ level_keyboard_new (struct squeek_layout *layout) if ((void*)ptr == (void*)-1) { g_error("Failed to set up mmap"); } - strncpy(ptr, keymap_str, keyboard->keymap_len); + strncpy(ptr, xkb_keymap_str, keyboard->keymap_len); + free(xkb_keymap_str); munmap(ptr, keyboard->keymap_len); return keyboard; }