[libc-commits] [libc] [libc] wmemcmp nullptr handling (PR #142058)

via libc-commits libc-commits at lists.llvm.org
Fri May 30 14:10:45 PDT 2025


https://github.com/sribee8 updated https://github.com/llvm/llvm-project/pull/142058

>From 24f44adc710616be3d93984ed02da48550f92581 Mon Sep 17 00:00:00 2001
From: Sriya Pratipati <sriyap at google.com>
Date: Thu, 29 May 2025 22:57:29 +0000
Subject: [PATCH 1/3] [libc] wmemcmp nullptr handling

Added nullptr handling for wmemcmp
---
 libc/src/wchar/wmemcmp.cpp | 3 +++
 1 file changed, 3 insertions(+)

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]);

>From 86853d9bd05609cb336a4ad3ee1c7b93f97da16c Mon Sep 17 00:00:00 2001
From: Sriya Pratipati <sriyap at google.com>
Date: Fri, 30 May 2025 18:04:52 +0000
Subject: [PATCH 2/3] added null_check to depends and death tests

---
 libc/src/wchar/CMakeLists.txt        | 1 +
 libc/test/src/wchar/wmemcmp_test.cpp | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/libc/src/wchar/CMakeLists.txt b/libc/src/wchar/CMakeLists.txt
index 43f571fed91af..fdcaeaf547317 100644
--- a/libc/src/wchar/CMakeLists.txt
+++ b/libc/src/wchar/CMakeLists.txt
@@ -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
 )
diff --git a/libc/test/src/wchar/wmemcmp_test.cpp b/libc/test/src/wchar/wmemcmp_test.cpp
index 536299fd7daf0..9a07215851adc 100644
--- a/libc/test/src/wchar/wmemcmp_test.cpp
+++ b/libc/test/src/wchar/wmemcmp_test.cpp
@@ -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));
+}

>From d82fcf11e14c9cd7706afe9c583c77a7b2643e04 Mon Sep 17 00:00:00 2001
From: Sriya Pratipati <sriyap at google.com>
Date: Fri, 30 May 2025 21:10:27 +0000
Subject: [PATCH 3/3] Added if defined for null check

---
 libc/test/src/wchar/wmemcmp_test.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/libc/test/src/wchar/wmemcmp_test.cpp b/libc/test/src/wchar/wmemcmp_test.cpp
index 9a07215851adc..5b07ca7396e97 100644
--- a/libc/test/src/wchar/wmemcmp_test.cpp
+++ b/libc/test/src/wchar/wmemcmp_test.cpp
@@ -67,6 +67,7 @@ TEST(LlvmLibcWMemcmpTest, LhsRhsAreTheSameLong) {
   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); },
@@ -74,3 +75,4 @@ TEST(LlvmLibcWMemcmpTest, NullptrCrash) {
   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