Skip to content

Commit aff1a48

Browse files
committed
wayland: Cleanup and return if keymap allocation fails
1 parent d9c20cf commit aff1a48

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/video/wayland/SDL_waylandevents.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,9 +1591,18 @@ static void keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
15911591
seat->keyboard.xkb.num_layouts = WAYLAND_xkb_keymap_num_layouts(seat->keyboard.xkb.keymap);
15921592
if (seat->keyboard.xkb.num_layouts) {
15931593
seat->keyboard.sdl_keymap = SDL_calloc(seat->keyboard.xkb.num_layouts, sizeof(SDL_Keymap *));
1594+
if (!seat->keyboard.sdl_keymap) {
1595+
return;
1596+
}
1597+
15941598
for (xkb_layout_index_t i = 0; i < seat->keyboard.xkb.num_layouts; ++i) {
15951599
seat->keyboard.sdl_keymap[i] = SDL_CreateKeymap(false);
1596-
if (!seat->keyboard.sdl_keymap) {
1600+
if (!seat->keyboard.sdl_keymap[i]) {
1601+
for (xkb_layout_index_t j = 0; j < i; ++j) {
1602+
SDL_DestroyKeymap(seat->keyboard.sdl_keymap[j]);
1603+
}
1604+
SDL_free(seat->keyboard.sdl_keymap);
1605+
seat->keyboard.sdl_keymap = NULL;
15971606
return;
15981607
}
15991608
}
@@ -2095,7 +2104,7 @@ static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
20952104
Wayland_HandleModifierKeys(seat, scancode, state == WL_KEYBOARD_KEY_STATE_PRESSED);
20962105

20972106
// If we have a key with unknown scancode, check if the keysym corresponds to a valid Unicode value, and assign it a reserved scancode.
2098-
if (scancode == SDL_SCANCODE_UNKNOWN && syms) {
2107+
if (scancode == SDL_SCANCODE_UNKNOWN && syms && seat->keyboard.sdl_keymap) {
20992108
const SDL_Keycode keycode = (SDL_Keycode)SDL_KeySymToUcs4(syms[0]);
21002109
if (keycode != SDLK_UNKNOWN) {
21012110
SDL_Keymod modstate = SDL_KMOD_NONE;

0 commit comments

Comments
 (0)