From 32f460d3570138c49772f3f37941f42a71b794c0 Mon Sep 17 00:00:00 2001
From: Cameron Gutman <[EMAIL REDACTED]>
Date: Sat, 27 Jun 2026 15:49:05 -0500
Subject: [PATCH] keyboard: Limit text input event size for sdl2-compat
---
src/events/SDL_keyboard.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/src/events/SDL_keyboard.c b/src/events/SDL_keyboard.c
index f6969e37ed26b..53508fd53fc51 100644
--- a/src/events/SDL_keyboard.c
+++ b/src/events/SDL_keyboard.c
@@ -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);
}
}