Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libc/src/wchar/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ add_entrypoint_object(
libc.hdr.types.size_t
libc.hdr.wchar_macros
libc.src.__support.wctype_utils
libc.src.__support.macros.null_check
)
3 changes: 3 additions & 0 deletions libc/src/wchar/wmemcmp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,14 @@
#include "hdr/types/wchar_t.h"
#include "src/__support/common.h"
#include "src/__support/macros/config.h"
#include "src/__support/macros/null_check.h" // LIBC_CRASH_ON_NULLPTR

namespace LIBC_NAMESPACE_DECL {

LLVM_LIBC_FUNCTION(int, wmemcmp,
(const wchar_t *s1, const wchar_t *s2, size_t n)) {
LIBC_CRASH_ON_NULLPTR(s1);
LIBC_CRASH_ON_NULLPTR(s2);
for (size_t i = 0; i < n; ++i) {
if (s1[i] != s2[i])
return (int)(s1[i] - s2[i]);
Expand Down
8 changes: 8 additions & 0 deletions libc/test/src/wchar/wmemcmp_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,11 @@ TEST(LlvmLibcWMemcmpTest, LhsRhsAreTheSameLong) {
const wchar_t *rhs = L"aaaaaaaaaaaaaa";
EXPECT_EQ(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 15), 0);
}

TEST(LlvmLibcWMemcmpTest, NullptrCrash) {
// Passing in a nullptr should crash the program.
EXPECT_DEATH([] { LIBC_NAMESPACE::wmemcmp(L"aaaaaaaaaaaaaa", nullptr, 15); },
WITH_SIGNAL(-1));
EXPECT_DEATH([] { LIBC_NAMESPACE::wmemcmp(nullptr, L"aaaaaaaaaaaaaa", 15); },
WITH_SIGNAL(-1));
}
Loading