[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