From: Rich Felker Date: Thu, 4 Apr 2013 18:48:48 +0000 (-0400) Subject: fix incorrect range checks in wcsrtombs X-Git-Tag: v0.9.10~30 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=40b2b5fa94d3ae27293f4d572bdcf1c3a5ef590f;p=oweals%2Fmusl.git fix incorrect range checks in wcsrtombs negative values of wchar_t need to be treated in the non-ASCII case so that they can properly generate EILSEQ rather than getting truncated to 8bit values and stored in the output. --- diff --git a/src/multibyte/wcsrtombs.c b/src/multibyte/wcsrtombs.c index 2582ac2f..d48a65e7 100644 --- a/src/multibyte/wcsrtombs.c +++ b/src/multibyte/wcsrtombs.c @@ -18,7 +18,7 @@ size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstat size_t N = n, l; if (!s) { for (n=0, ws2=*ws; *ws2; ws2++) { - if (*ws2 >= 0x80) { + if (*ws2 >= 0x80u) { l = wcrtomb(buf, *ws2, 0); if (!(l+1)) return -1; n += l; @@ -27,7 +27,7 @@ size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstat return n; } while (n>=4 && **ws) { - if (**ws >= 0x80) { + if (**ws >= 0x80u) { l = wcrtomb(s, **ws, 0); if (!(l+1)) return -1; s += l; @@ -39,7 +39,7 @@ size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstat (*ws)++; } while (n && **ws) { - if (**ws >= 0x80) { + if (**ws >= 0x80u) { l = wcrtomb(buf, **ws, 0); if (!(l+1)) return -1; if (l>n) return N-n;