From 40850267d4bf515c94850de40469baeb0e7fb1df Mon Sep 17 00:00:00 2001 From: Benjamin Schaaf Date: Sat, 3 Oct 2020 16:07:36 +1000 Subject: [PATCH 1/2] 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; } From 5e43a31051dc0c03c10fbd1ffae955f2dc63b3ec Mon Sep 17 00:00:00 2001 From: Benjamin Schaaf Date: Sat, 3 Oct 2020 16:23:13 +1000 Subject: [PATCH 2/2] Fix leak endlessly adding a resource path to the default theme --- eek/eek-gtk-keyboard.c | 4 ++++ eek/eek-renderer.c | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 9b839b10..3a477668 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -360,6 +360,10 @@ eek_gtk_keyboard_init (EekGtkKeyboard *self) priv->event = lfb_event_new ("button-pressed"); else g_warning ("Failed to init libfeedback: %s", err->message); + + GtkIconTheme *theme = gtk_icon_theme_get_default (); + + gtk_icon_theme_add_resource_path (theme, "/sm/puri/squeekboard/icons"); } static void diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 8e62c560..143c553e 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -265,10 +265,6 @@ renderer_init (EekRenderer *self) self->allocation_height = 0.0; self->scale_factor = 1; - GtkIconTheme *theme = gtk_icon_theme_get_default (); - - gtk_icon_theme_add_resource_path (theme, "/sm/puri/squeekboard/icons"); - self->css_provider = squeek_load_style(); }