diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 437ac67ea7..e56d8a89de 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -839,6 +839,7 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_ Display *display = videodata->display; KeyCode keycode = xevent->xkey.keycode; KeySym keysym = NoSymbol; + int text_length = 0; char text[64]; Status status = 0; SDL_bool handled_by_ime = SDL_FALSE; @@ -891,13 +892,13 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_ #ifdef X_HAVE_UTF8_STRING if (windowdata->ic && xevent->type == KeyPress) { - X11_Xutf8LookupString(windowdata->ic, &xevent->xkey, text, sizeof(text), + text_length = X11_Xutf8LookupString(windowdata->ic, &xevent->xkey, text, sizeof(text) - 1, &keysym, &status); } else { - XLookupStringAsUTF8(&xevent->xkey, text, sizeof(text), &keysym, NULL); + text_length = XLookupStringAsUTF8(&xevent->xkey, text, sizeof(text) - 1, &keysym, NULL); } #else - XLookupStringAsUTF8(&xevent->xkey, text, sizeof(text), &keysym, NULL); + text_length = XLookupStringAsUTF8(&xevent->xkey, text, sizeof(text) - 1, &keysym, NULL); #endif #ifdef SDL_USE_IME @@ -912,6 +913,7 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_ SDL_SendKeyboardKey(0, keyboardID, SDL_PRESSED, videodata->key_layout[keycode]); } if (*text) { + text[text_length] = '\0'; SDL_SendKeyboardText(text); } } else {