1
0
Эх сурвалжийг харах

keyboard: Limit text input event size for sdl2-compat

Cameron Gutman 1 өдөр өмнө
parent
commit
32f460d357

+ 26 - 4
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);
     }
 }