From a2f300f0d569a714bf7ae884f1af77827e5b6e30 Mon Sep 17 00:00:00 2001 From: Explorer09 Date: Sun, 19 Jan 2025 06:42:14 +0800 Subject: [PATCH] Fix mbstowcs_nonfatal() that might convert string shorter than desired The "n" parameter of mbstowcs_nonfatal() refers to number of wide characters. But the logic seemed to be confused with "n" parameter of mbrtowc() (the number of bytes). Signed-off-by: Kang-Che Sung --- RichString.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/RichString.c b/RichString.c index 70bb81b5d..f79e6efe3 100644 --- a/RichString.c +++ b/RichString.c @@ -74,8 +74,8 @@ static size_t mbstowcs_nonfatal(wchar_t* restrict dest, const char* restrict src mbstate_t ps = { 0 }; bool broken = false; - while (n > 0) { - size_t ret = mbrtowc(dest, src, n, &ps); + while (written < n) { + size_t ret = mbrtowc(dest, src, SIZE_MAX, &ps); if (ret == (size_t)-1 || ret == (size_t)-2) { if (!broken) { broken = true; @@ -83,7 +83,6 @@ static size_t mbstowcs_nonfatal(wchar_t* restrict dest, const char* restrict src written++; } src++; - n--; continue; } @@ -96,7 +95,6 @@ static size_t mbstowcs_nonfatal(wchar_t* restrict dest, const char* restrict src dest++; written++; src += ret; - n -= ret; } return written;