mbrtowc: Fix wrong return value when n > UINT_MAX
authorAlexey Izbyshev <izbyshev@ispras.ru>
Fri, 26 May 2023 16:34:14 +0000 (19:34 +0300)
committerRich Felker <dalias@aerifal.cx>
Fri, 26 May 2023 20:12:29 +0000 (16:12 -0400)
mbrtowc truncates n to unsigned int when storing its copy.
If n > UINT_MAX and the locale is not POSIX, the function will
return a wrong value greater than UINT_MAX on the success path.

src/multibyte/mbrtowc.c

index c94819e..7824997 100644 (file)
@@ -8,7 +8,7 @@ size_t mbrtowc(wchar_t *restrict wc, const char *restrict src, size_t n, mbstate
        static unsigned internal_state;
        unsigned c;
        const unsigned char *s = (const void *)src;
-       const unsigned N = n;
+       const size_t N = n;
        wchar_t dummy;
 
        if (!st) st = (void *)&internal_state;