diff options
author | bapt <bapt@FreeBSD.org> | 2015-08-09 00:06:56 +0000 |
---|---|---|
committer | bapt <bapt@FreeBSD.org> | 2015-08-09 00:06:56 +0000 |
commit | 9e0d1c3e199cfcd8480d2e892da387ebb1bbde8b (patch) | |
tree | 09b976e438db48b8cec0e5b842b3bd90936d3a8f /lib/libc | |
parent | df871b442a50fbf3cc4d8c19deb60a0af5121a8e (diff) | |
download | FreeBSD-src-9e0d1c3e199cfcd8480d2e892da387ebb1bbde8b.zip FreeBSD-src-9e0d1c3e199cfcd8480d2e892da387ebb1bbde8b.tar.gz |
Remove 5 and 6 bytes sequences which are illegal in UTF-8 space. (part2)
Per rfc3629 value greater than 0x10ffff should be rejected
Suggested by: jilles
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/locale/utf8.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c index 843d59f..55e2931 100644 --- a/lib/libc/locale/utf8.c +++ b/lib/libc/locale/utf8.c @@ -320,15 +320,9 @@ _UTF8_wcrtomb(char * __restrict s, wchar_t wc, mbstate_t * __restrict ps) } else if ((wc & ~0xffff) == 0) { lead = 0xe0; len = 3; - } else if ((wc & ~0x1fffff) == 0) { + } else if (wc >= 0 && wc <= 0x10ffff) { lead = 0xf0; len = 4; - } else if ((wc & ~0x3ffffff) == 0) { - lead = 0xf8; - len = 5; - } else if ((wc & ~0x7fffffff) == 0) { - lead = 0xfc; - len = 6; } else { errno = EILSEQ; return ((size_t)-1); |