config/keybind.c: Don't overwrite the stack

This commit is contained in:
Consolatis 2022-01-03 05:38:48 +01:00 committed by Johan Malm
parent a47931bba2
commit f28319be54
2 changed files with 9 additions and 1 deletions

View file

@ -5,6 +5,8 @@
#include <wlr/types/wlr_keyboard.h> #include <wlr/types/wlr_keyboard.h>
#include <xkbcommon/xkbcommon.h> #include <xkbcommon/xkbcommon.h>
#define MAX_KEYSYMS 32
struct keybind { struct keybind {
uint32_t modifiers; uint32_t modifiers;
xkb_keysym_t *keysyms; xkb_keysym_t *keysyms;

View file

@ -28,7 +28,7 @@ struct keybind *
keybind_create(const char *keybind) keybind_create(const char *keybind)
{ {
struct keybind *k = calloc(1, sizeof(struct keybind)); struct keybind *k = calloc(1, sizeof(struct keybind));
xkb_keysym_t keysyms[32]; xkb_keysym_t keysyms[MAX_KEYSYMS];
gchar **symnames = g_strsplit(keybind, "-", -1); gchar **symnames = g_strsplit(keybind, "-", -1);
for (int i = 0; symnames[i]; i++) { for (int i = 0; symnames[i]; i++) {
char *symname = symnames[i]; char *symname = symnames[i];
@ -46,6 +46,12 @@ keybind_create(const char *keybind)
} }
keysyms[k->keysyms_len] = sym; keysyms[k->keysyms_len] = sym;
k->keysyms_len++; k->keysyms_len++;
if (k->keysyms_len == MAX_KEYSYMS) {
wlr_log(WLR_ERROR, "There are a lot of fingers involved. "
"We stopped counting at %u.", MAX_KEYSYMS);
wlr_log(WLR_ERROR, "Offending keybind was %s", keybind);
break;
}
} }
} }
g_strfreev(symnames); g_strfreev(symnames);