]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
u8_analyze: return false on any invalid character, we do not allow invalid/overlong...
authorWolfgang Bumiller <blub@speed.at>
Sat, 22 Dec 2012 21:31:10 +0000 (22:31 +0100)
committerWolfgang Bumiller <blub@speed.at>
Sun, 23 Dec 2012 09:23:41 +0000 (10:23 +0100)
utf8lib.c

index 3c4749b63919109ba7f50dc0d98a302e118c357f..b26f2f151ccb5a6c8a80430b1ff5015913fbcb30 100644 (file)
--- a/utf8lib.c
+++ b/utf8lib.c
@@ -48,7 +48,7 @@ static bool u8_analyze(const char *_s, size_t *_start, size_t *_len, Uchar *_ch,
        Uchar ch;
 
        i = 0;
-findchar:
+/* findchar: */
        while (i < _maxlen && s[i] && (bits = utf8_lengths[s[i]]) == 0)
                ++i;
 
@@ -71,14 +71,20 @@ findchar:
                if ( (s[i+j] & 0xC0) != 0x80 )
                {
                        i += j;
-                       goto findchar;
+                       /* in gmqcc, invalid / overlong encodings are considered an error
+                        * goto findchar;
+                        */
+                       return false;
                }
                ch = (ch << 6) | (s[i+j] & 0x3F);
        }
        if (ch < utf8_range[bits] || ch >= 0x10FFFF)
        {
-               i += bits;
-               goto findchar;
+               /* same: error
+                * i += bits;
+                * goto findchar;
+                */
+               return false;
        }
 
        if (_start)