[libc-commits] [libc] 45c2974 - [libc] added nullptr checks for wcspbrk (#142216)
via libc-commits
libc-commits at lists.llvm.org
Mon Jun 2 15:20:56 PDT 2025
Author: Uzair Nawaz
Date: 2025-06-02T15:20:53-07:00
New Revision: 45c297428acbf74c088c3bf6977c83369dbc42f2
URL: https://github.com/llvm/llvm-project/commit/45c297428acbf74c088c3bf6977c83369dbc42f2
DIFF: https://github.com/llvm/llvm-project/commit/45c297428acbf74c088c3bf6977c83369dbc42f2.diff
LOG: [libc] added nullptr checks for wcspbrk (#142216)
Added CRASH_ON_NULLPTR macro to wcspbrk function and related test
Added:
Modified:
libc/src/wchar/CMakeLists.txt
libc/src/wchar/wcspbrk.cpp
libc/test/src/wchar/wcspbrk_test.cpp
Removed:
################################################################################
diff --git a/libc/src/wchar/CMakeLists.txt b/libc/src/wchar/CMakeLists.txt
index c27ac4e568b6d..0f5b7470ada8e 100644
--- a/libc/src/wchar/CMakeLists.txt
+++ b/libc/src/wchar/CMakeLists.txt
@@ -76,6 +76,7 @@ add_entrypoint_object(
DEPENDS
libc.hdr.wchar_macros
libc.src.__support.wctype_utils
+ libc.src.__support.macros.null_check
)
add_entrypoint_object(
diff --git a/libc/src/wchar/wcspbrk.cpp b/libc/src/wchar/wcspbrk.cpp
index bf305a5dbe125..a00ba9979a489 100644
--- a/libc/src/wchar/wcspbrk.cpp
+++ b/libc/src/wchar/wcspbrk.cpp
@@ -10,6 +10,7 @@
#include "hdr/types/wchar_t.h"
#include "src/__support/common.h"
+#include "src/__support/macros/null_check.h"
namespace LIBC_NAMESPACE_DECL {
@@ -23,6 +24,9 @@ bool contains_char(const wchar_t *str, wchar_t target) {
LLVM_LIBC_FUNCTION(const wchar_t *, wcspbrk,
(const wchar_t *src, const wchar_t *breakset)) {
+ LIBC_CRASH_ON_NULLPTR(src);
+ LIBC_CRASH_ON_NULLPTR(breakset);
+
// currently O(n * m), can be further optimized to O(n + m) with a hash set
for (int src_idx = 0; src[src_idx] != 0; src_idx++)
if (contains_char(breakset, src[src_idx]))
diff --git a/libc/test/src/wchar/wcspbrk_test.cpp b/libc/test/src/wchar/wcspbrk_test.cpp
index f7754c0b324e9..bca9bffcf85f0 100644
--- a/libc/test/src/wchar/wcspbrk_test.cpp
+++ b/libc/test/src/wchar/wcspbrk_test.cpp
@@ -60,3 +60,13 @@ TEST(LlvmLibcWCSPBrkTest, FindsFirstInBreakset) {
EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"34"), src + 2);
EXPECT_EQ(LIBC_NAMESPACE::wcspbrk(src, L"43"), src + 2);
}
+
+#if defined(LIBC_ADD_NULL_CHECKS) && !defined(LIBC_HAS_SANITIZER)
+TEST(LlvmLibcWCSPBrkTest, NullptrCrash) {
+ // Passing in a nullptr should crash the program.
+ EXPECT_DEATH([] { LIBC_NAMESPACE::wcspbrk(L"aaaaaaaaaaaaaa", nullptr); },
+ WITH_SIGNAL(-1));
+ EXPECT_DEATH([] { LIBC_NAMESPACE::wcspbrk(nullptr, L"aaaaaaaaaaaaaa"); },
+ WITH_SIGNAL(-1));
+}
+#endif // LIBC_HAS_ADDRESS_SANITIZER
More information about the libc-commits
mailing list