commit 44fdd353a9864ddb98cf5ef72f57936c42805038
parent f9bbf270b93c85592b54d7d2c6b4cb769feecc64
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sat, 4 Oct 2014 12:36:16 +0000
do some extra checks to be safe
Diffstat:
M | sob.c | | | 21 | +++++++++++++++------ |
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/sob.c b/sob.c
@@ -151,7 +151,7 @@ utfuntilchar(size_t *b, size_t *u, int (*f)(int), int dir)
}
} else {
- while(*u > 0) {
+ while(*u > 0 && *b > 0) {
if(f(line.line[*b - 1]))
break;
if((n = utfprevn(line.line, *b, 1)) == 0)
@@ -289,10 +289,14 @@ line_cursor_begin(void)
static void
line_cursor_prev(void)
{
+ size_t n;
+
if(line.utfpos <= 0)
return;
+ if((n = utfprevn(line.line, line.bytepos, 1)) == 0)
+ return;
- line.bytepos -= utfprevn(line.line, line.bytepos, 1);
+ line.bytepos -= n;
line.utfpos--;
line_cursor_move(line.utfpos);
}
@@ -300,10 +304,14 @@ line_cursor_prev(void)
static void
line_cursor_next(void)
{
+ size_t n;
+
if(line.utfpos >= line.utflen)
return;
- line.bytepos += utfnextn(line.line, line.bytepos, 1);
+ if((n = utfnextn(line.line, line.bytepos, 1)) == 0)
+ return;
+ line.bytepos += n;
line.utfpos++;
line_cursor_move(line.utfpos);
}
@@ -332,7 +340,8 @@ line_delcharnext(void)
if(line.utfpos == line.utflen || line.utflen <= 0)
return;
- siz = utfnextn(line.line, line.bytepos, 1);
+ if((siz = utfnextn(line.line, line.bytepos, 1)) == 0)
+ return;
memmove(&line.line[line.bytepos], &line.line[line.bytepos + siz],
line.bytesiz - line.bytepos - siz);
@@ -348,8 +357,8 @@ line_delcharprev(void)
if(line.utfpos <= 0 || line.utflen <= 0)
return;
-
- siz = utfprevn(line.line, line.bytepos, 1);
+ if((siz = utfprevn(line.line, line.bytepos, 1)) == 0)
+ return;
memmove(&line.line[line.bytepos - siz], &line.line[line.bytepos],
line.bytesiz - line.bytepos);