do some extra checks to be safe - sob - simple output bar
 (HTM) git clone git://git.codemadness.org/sob
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 44fdd353a9864ddb98cf5ef72f57936c42805038
 (DIR) parent f9bbf270b93c85592b54d7d2c6b4cb769feecc64
 (HTM) 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(-)
       ---
 (DIR) 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);