From f8b98952cf1d40911593ca9ce1f8c78187551eb5 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Tue, 6 Oct 2015 16:22:44 +0200 Subject: gl: Add checks to prevent overruns in the presence of malformed UTF-8. --- platform/gl/gl-input.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'platform/gl') diff --git a/platform/gl/gl-input.c b/platform/gl/gl-input.c index 35c74866..442c277a 100644 --- a/platform/gl/gl-input.c +++ b/platform/gl/gl-input.c @@ -51,10 +51,10 @@ static inline int myisalnum(char *s) return 0; } -static char *prev_char(char *p) +static char *prev_char(char *p, char *start) { --p; - while ((*p & 0xC0) == 0x80) /* skip middle and final multibytes */ + while ((*p & 0xC0) == 0x80 && p > start) /* skip middle and final multibytes */ --p; return p; } @@ -69,8 +69,8 @@ static char *next_char(char *p) static char *prev_word(char *p, char *start) { - while (p > start && !myisalnum(prev_char(p))) p = prev_char(p); - while (p > start && myisalnum(prev_char(p))) p = prev_char(p); + while (p > start && !myisalnum(prev_char(p, start))) p = prev_char(p, start); + while (p > start && myisalnum(prev_char(p, start))) p = prev_char(p, start); return p; } @@ -124,14 +124,14 @@ static int ui_input_key(struct input *input) else if (ui.mod == GLFW_MOD_SHIFT) { if (input->q > input->text) - input->q = prev_char(input->q); + input->q = prev_char(input->q, input->text); } else if (ui.mod == 0) { if (input->p != input->q) input->p = input->q = input->p < input->q ? input->p : input->q; else if (input->q > input->text) - input->p = input->q = prev_char(input->q); + input->p = input->q = prev_char(input->q, input->text); } break; case KEY_RIGHT: @@ -218,7 +218,7 @@ static int ui_input_key(struct input *input) ui_input_delete_selection(input); else if (input->p > input->text) { - char *pp = prev_char(input->p); + char *pp = prev_char(input->p, input->text); memmove(pp, input->p, input->end - input->p); input->end -= input->p - pp; *input->end = 0; -- cgit v1.2.3