diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-01-19 09:12:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-19 09:12:18 +0100 |
commit | fe2932a969cdc0483c31c12c1f8bfd5868401da8 (patch) | |
tree | 5a5549a41e2b8ad302c4b1c4d05844484d5cc018 /platform | |
parent | 76bff3ef6ef04681b569415379f1985d6a8c72c2 (diff) | |
parent | 2419ffd428309d7159c3c28865060b19cd27b92a (diff) |
Merge pull request #15861 from poke1024/macos-keybuffer
On macOS, prevent key_event_buffer overflows
Diffstat (limited to 'platform')
-rw-r--r-- | platform/osx/os_osx.h | 6 | ||||
-rw-r--r-- | platform/osx/os_osx.mm | 17 |
2 files changed, 14 insertions, 9 deletions
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index c422eb9223..d9ad0a7db8 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -52,10 +52,6 @@ class OS_OSX : public OS_Unix { public: - enum { - KEY_EVENT_BUFFER_SIZE = 512 - }; - struct KeyEvent { unsigned int osx_state; bool pressed; @@ -64,7 +60,7 @@ public: uint32_t unicode; }; - KeyEvent key_event_buffer[KEY_EVENT_BUFFER_SIZE]; + Vector<KeyEvent> key_event_buffer; int key_event_pos; bool force_quit; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 8369adbb5f..ab54f62045 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -88,6 +88,15 @@ static void get_key_modifier_state(unsigned int p_osx_state, Ref<InputEventWithM state->set_metakey((p_osx_state & NSEventModifierFlagCommand)); } +static void push_to_key_event_buffer(const OS_OSX::KeyEvent &p_event) { + + Vector<OS_OSX::KeyEvent> &buffer = OS_OSX::singleton->key_event_buffer; + if (OS_OSX::singleton->key_event_pos >= buffer.size()) { + buffer.resize(1 + OS_OSX::singleton->key_event_pos); + } + buffer[OS_OSX::singleton->key_event_pos++] = p_event; +} + static int mouse_x = 0; static int mouse_y = 0; static int prev_mouse_x = 0; @@ -446,7 +455,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; ke.scancode = 0; ke.unicode = codepoint; - OS_OSX::singleton->key_event_buffer[OS_OSX::singleton->key_event_pos++] = ke; + push_to_key_event_buffer(ke); } [self cancelComposition]; } @@ -805,7 +814,7 @@ static int translateKey(unsigned int key) { ke.scancode = latin_keyboard_keycode_convert(translateKey([event keyCode])); ke.unicode = 0; - OS_OSX::singleton->key_event_buffer[OS_OSX::singleton->key_event_pos++] = ke; + push_to_key_event_buffer(ke); } if ((OS_OSX::singleton->im_position.x != 0) && (OS_OSX::singleton->im_position.y != 0)) @@ -858,7 +867,7 @@ static int translateKey(unsigned int key) { ke.scancode = latin_keyboard_keycode_convert(translateKey(key)); ke.unicode = 0; - OS_OSX::singleton->key_event_buffer[OS_OSX::singleton->key_event_pos++] = ke; + push_to_key_event_buffer(ke); } } @@ -874,7 +883,7 @@ static int translateKey(unsigned int key) { ke.scancode = latin_keyboard_keycode_convert(translateKey([event keyCode])); ke.unicode = 0; - OS_OSX::singleton->key_event_buffer[OS_OSX::singleton->key_event_pos++] = ke; + push_to_key_event_buffer(ke); } } |