wayland: Cleanup and return if keymap allocation fails

This commit is contained in:
Frank Praznik
2025-08-08 17:53:21 -04:00
parent d9c20cfd0a
commit aff1a48bd9

View File

@@ -1591,9 +1591,18 @@ static void keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
seat->keyboard.xkb.num_layouts = WAYLAND_xkb_keymap_num_layouts(seat->keyboard.xkb.keymap);
if (seat->keyboard.xkb.num_layouts) {
seat->keyboard.sdl_keymap = SDL_calloc(seat->keyboard.xkb.num_layouts, sizeof(SDL_Keymap *));
if (!seat->keyboard.sdl_keymap) {
return;
}
for (xkb_layout_index_t i = 0; i < seat->keyboard.xkb.num_layouts; ++i) {
seat->keyboard.sdl_keymap[i] = SDL_CreateKeymap(false);
if (!seat->keyboard.sdl_keymap) {
if (!seat->keyboard.sdl_keymap[i]) {
for (xkb_layout_index_t j = 0; j < i; ++j) {
SDL_DestroyKeymap(seat->keyboard.sdl_keymap[j]);
}
SDL_free(seat->keyboard.sdl_keymap);
seat->keyboard.sdl_keymap = NULL;
return;
}
}
@@ -2095,7 +2104,7 @@ static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
Wayland_HandleModifierKeys(seat, scancode, state == WL_KEYBOARD_KEY_STATE_PRESSED);
// If we have a key with unknown scancode, check if the keysym corresponds to a valid Unicode value, and assign it a reserved scancode.
if (scancode == SDL_SCANCODE_UNKNOWN && syms) {
if (scancode == SDL_SCANCODE_UNKNOWN && syms && seat->keyboard.sdl_keymap) {
const SDL_Keycode keycode = (SDL_Keycode)SDL_KeySymToUcs4(syms[0]);
if (keycode != SDLK_UNKNOWN) {
SDL_Keymod modstate = SDL_KMOD_NONE;