[libc-commits] [libc] 328f40f - [libc] wmemcmp nullptr handling (#142058)
via libc-commits
libc-commits at lists.llvm.org
Fri May 30 14:38:04 PDT 2025
Author: sribee8
Date: 2025-05-30T14:38:01-07:00
New Revision: 328f40f408c218f25695ea42c844e43bef38660b
URL: https://github.com/llvm/llvm-project/commit/328f40f408c218f25695ea42c844e43bef38660b
DIFF: https://github.com/llvm/llvm-project/commit/328f40f408c218f25695ea42c844e43bef38660b.diff
LOG: [libc] wmemcmp nullptr handling (#142058)
Added nullptr handling for wmemcmp
---------
Co-authored-by: Sriya Pratipati <sriyap at google.com>
Added:
Modified:
libc/src/wchar/CMakeLists.txt
libc/src/wchar/wmemcmp.cpp
libc/test/src/wchar/wmemcmp_test.cpp
Removed:
################################################################################
diff --git a/libc/src/wchar/CMakeLists.txt b/libc/src/wchar/CMakeLists.txt
index e7f36c22f6aa5..9db121762348b 100644
--- a/libc/src/wchar/CMakeLists.txt
+++ b/libc/src/wchar/CMakeLists.txt
@@ -90,6 +90,7 @@ add_entrypoint_object(
libc.hdr.types.size_t
libc.hdr.wchar_macros
libc.src.__support.wctype_utils
+ libc.src.__support.macros.null_check
)
add_entrypoint_object(
diff --git a/libc/src/wchar/wmemcmp.cpp b/libc/src/wchar/wmemcmp.cpp
index f2fa361c69798..374f3d5ddb627 100644
--- a/libc/src/wchar/wmemcmp.cpp
+++ b/libc/src/wchar/wmemcmp.cpp
@@ -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]);
diff --git a/libc/test/src/wchar/wmemcmp_test.cpp b/libc/test/src/wchar/wmemcmp_test.cpp
index 536299fd7daf0..5b07ca7396e97 100644
--- a/libc/test/src/wchar/wmemcmp_test.cpp
+++ b/libc/test/src/wchar/wmemcmp_test.cpp
@@ -66,3 +66,13 @@ TEST(LlvmLibcWMemcmpTest, LhsRhsAreTheSameLong) {
const wchar_t *rhs = L"aaaaaaaaaaaaaa";
EXPECT_EQ(LIBC_NAMESPACE::wmemcmp(lhs, rhs, 15), 0);
}
+
+#if defined(LIBC_ADD_NULL_CHECKS) && !defined(LIBC_HAS_SANITIZER)
+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));
+}
+#endif // LIBC_HAS_ADDRESS_SANITIZER
More information about the libc-commits
mailing list