aboutsummaryrefslogtreecommitdiff
path: root/libc/src
diff options
context:
space:
mode:
authorsribee8 <sriya.pratipati@gmail.com>2025-07-22 22:47:34 +0000
committerGitHub <noreply@github.com>2025-07-22 22:47:34 +0000
commit5edb845fcaafd56110670fb2f6eeac22cbb0afff (patch)
tree0a07bd91dc171d527b7fee07248f4e457a29eb57 /libc/src
parent681c2ee4dfbf10b3ef74afd1a2c72f844771e602 (diff)
downloadllvm-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.cpp3
-rw-r--r--libc/src/wchar/mbtowc.cpp5
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;