Fix leak in level_keyboard_new
xkb_keymap_get_as_string requires that the string it returns is freed by the caller.
This commit is contained in:
@ -64,8 +64,8 @@ level_keyboard_new (struct squeek_layout *layout)
|
|||||||
xkb_context_unref(context);
|
xkb_context_unref(context);
|
||||||
keyboard->keymap = keymap;
|
keyboard->keymap = keymap;
|
||||||
|
|
||||||
keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
|
char * xkb_keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
|
||||||
keyboard->keymap_len = strlen(keymap_str) + 1;
|
keyboard->keymap_len = strlen(xkb_keymap_str) + 1;
|
||||||
|
|
||||||
g_autofree char *path = strdup("/eek_keymap-XXXXXX");
|
g_autofree char *path = strdup("/eek_keymap-XXXXXX");
|
||||||
char *r = &path[strlen(path) - 6];
|
char *r = &path[strlen(path) - 6];
|
||||||
@ -89,7 +89,8 @@ level_keyboard_new (struct squeek_layout *layout)
|
|||||||
if ((void*)ptr == (void*)-1) {
|
if ((void*)ptr == (void*)-1) {
|
||||||
g_error("Failed to set up mmap");
|
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);
|
munmap(ptr, keyboard->keymap_len);
|
||||||
return keyboard;
|
return keyboard;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user