summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Liebl <Bernhard.Liebl@gmx.org>2018-01-19 08:47:30 +0100
committerBernhard Liebl <Bernhard.Liebl@gmx.org>2018-01-19 08:47:30 +0100
commit2419ffd428309d7159c3c28865060b19cd27b92a (patch)
tree8b1143fda6024d67f29ff39b10f455723657a390
parent9f479f096cb50fa8d1215e68c262f110116114ef (diff)
On macOS, prevent key_event_buffer overflows
-rw-r--r--platform/osx/os_osx.h6
-rw-r--r--platform/osx/os_osx.mm17
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);
}
}