diff options
author | sribee8 <sriya.pratipati@gmail.com> | 2025-07-22 22:47:34 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-22 22:47:34 +0000 |
commit | 5edb845fcaafd56110670fb2f6eeac22cbb0afff (patch) | |
tree | 0a07bd91dc171d527b7fee07248f4e457a29eb57 /libc/src | |
parent | 681c2ee4dfbf10b3ef74afd1a2c72f844771e602 (diff) | |
download | llvm-5edb845fcaafd56110670fb2f6eeac22cbb0afff.zip llvm-5edb845fcaafd56110670fb2f6eeac22cbb0afff.tar.gz llvm-5edb845fcaafd56110670fb2f6eeac22cbb0afff.tar.bz2 |
[libc] Fixed mbtowc functions (#150118)
mbrtowc was not handling null destination correctly
---------
Co-authored-by: Sriya Pratipati <sriyap@google.com>
Diffstat (limited to 'libc/src')
-rw-r--r-- | libc/src/__support/wchar/mbrtowc.cpp | 3 | ||||
-rw-r--r-- | libc/src/wchar/mbtowc.cpp | 5 |
2 files changed, 3 insertions, 5 deletions
diff --git a/libc/src/__support/wchar/mbrtowc.cpp b/libc/src/__support/wchar/mbrtowc.cpp index 90ba934..0f730d6 100644 --- a/libc/src/__support/wchar/mbrtowc.cpp +++ b/libc/src/__support/wchar/mbrtowc.cpp @@ -37,7 +37,8 @@ ErrorOr<size_t> mbrtowc(wchar_t *__restrict pwc, const char *__restrict s, } auto wc = char_conv.pop_utf32(); if (wc.has_value()) { - *pwc = wc.value(); + if (pwc != nullptr) + *pwc = wc.value(); // null terminator -> return 0 if (wc.value() == L'\0') return 0; diff --git a/libc/src/wchar/mbtowc.cpp b/libc/src/wchar/mbtowc.cpp index eae39ba..6d099d4 100644 --- a/libc/src/wchar/mbtowc.cpp +++ b/libc/src/wchar/mbtowc.cpp @@ -25,10 +25,7 @@ LLVM_LIBC_FUNCTION(int, mbtowc, if (s == nullptr) return 0; internal::mbstate internal_mbstate; - // temp ptr to use if pwc is nullptr - wchar_t buf[1]; - auto ret = - internal::mbrtowc(pwc == nullptr ? buf : pwc, s, n, &internal_mbstate); + auto ret = internal::mbrtowc(pwc, s, n, &internal_mbstate); if (!ret.has_value() || static_cast<int>(ret.value()) == -2) { // Encoding failure libc_errno = EILSEQ; |