Преглед на файлове

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.
Rich Felker преди 12 години
родител
ревизия
40b2b5fa94
променени са 1 файла, в които са добавени 3 реда и са изтрити 3 реда
  1. 3 3
      src/multibyte/wcsrtombs.c

+ 3 - 3
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;