keyboard: Limit text input event size for sdl2-compat
Some checks are pending
Build (All) / Create test plan (push) Waiting to run
Build (All) / level1 (push) Blocked by required conditions
Build (All) / level2 (push) Blocked by required conditions

This commit is contained in:
Cameron Gutman 2026-06-27 15:49:05 -05:00 committed by Sam Lantinga
parent 8ee03d68bd
commit 32f460d357

View file

@ -784,11 +784,33 @@ void SDL_SendKeyboardText(const char *text)
event.type = SDL_EVENT_TEXT_INPUT;
event.common.timestamp = 0;
event.text.windowID = keyboard->focus ? keyboard->focus->id : 0;
event.text.text = SDL_CreateTemporaryString(text);
if (!event.text.text) {
return;
if (SDL_GetHintBoolean("SDL2_COMPAT", false)) {
size_t pos = 0, advance, length = SDL_strlen(text);
// Limit SDL_EVENT_TEXT_INPUT events to 32 bytes for SDL2 compatibility
while (pos < length) {
char trimmed_text[32];
advance = SDL_utf8strlcpy(trimmed_text, text + pos, SDL_arraysize(trimmed_text));
if (!advance) {
break;
}
pos += advance;
event.text.text = SDL_CreateTemporaryString(trimmed_text);
if (!event.text.text) {
return;
}
SDL_PushEvent(&event);
}
} else {
event.text.text = SDL_CreateTemporaryString(text);
if (!event.text.text) {
return;
}
SDL_PushEvent(&event);
}
SDL_PushEvent(&event);
}
}