libc/locale: limit utf8 illegal input detection to 10FF FFFF
authorJohn Marino <draco@marino.st>
Sun, 16 Aug 2015 07:51:02 +0000 (09:51 +0200)
committerJohn Marino <draco@marino.st>
Sun, 16 Aug 2015 07:51:02 +0000 (09:51 +0200)
This had been mostly done but we missed these two changes.

Discovered-by: dillon
lib/libc/locale/utf8.c

index ce18278..c2b8f43 100644 (file)
@@ -98,7 +98,7 @@ _UTF8_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n,
 
        us = (_UTF8State *)ps;
 
-       if (us->want < 0 || us->want > 6) {
+       if (us->want < 0 || us->want > 4) {
                errno = EINVAL;
                return ((size_t)-1);
        }
@@ -185,7 +185,7 @@ _UTF8_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n,
                us->ch = wch;
                return ((size_t)-2);
        }
-       if (wch < lbound) {
+       if (wch < lbound || (wch & ~10ffffff)) {
                /*
                 * Malformed input; redundant encoding.
                 */