[llvm] 72eac42 - [xxHash] Don't trigger UB on empty StringRef
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 8 03:55:38 PST 2023
Author: Benjamin Kramer
Date: 2023-02-08T12:53:54+01:00
New Revision: 72eac42f21c0f45a27f3eaaff9364cbb5189b9e4
URL: https://github.com/llvm/llvm-project/commit/72eac42f21c0f45a27f3eaaff9364cbb5189b9e4
DIFF: https://github.com/llvm/llvm-project/commit/72eac42f21c0f45a27f3eaaff9364cbb5189b9e4.diff
LOG: [xxHash] Don't trigger UB on empty StringRef
This is quite silly, but casting to uintptr_t seems like the easiest
option to quiet ubsan.
llvm/lib/Support/xxhash.cpp:107:12: runtime error: applying non-zero offset 8 to null pointer
#0 0x7fe3660404c0 in llvm::xxHash64(llvm::StringRef) llvm/lib/Support/xxhash.cpp:107:12
Added:
Modified:
llvm/lib/Support/xxhash.cpp
llvm/unittests/Support/xxhashTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Support/xxhash.cpp b/llvm/lib/Support/xxhash.cpp
index 9a3f5faa336b..99b94a966bc9 100644
--- a/llvm/lib/Support/xxhash.cpp
+++ b/llvm/lib/Support/xxhash.cpp
@@ -104,14 +104,15 @@ uint64_t llvm::xxHash64(StringRef Data) {
H64 += (uint64_t)Len;
- while (P + 8 <= BEnd) {
+ while (reinterpret_cast<uintptr_t>(P) + 8 <=
+ reinterpret_cast<uintptr_t>(BEnd)) {
uint64_t const K1 = round(0, endian::read64le(P));
H64 ^= K1;
H64 = rotl64(H64, 27) * PRIME64_1 + PRIME64_4;
P += 8;
}
- if (P + 4 <= BEnd) {
+ if (reinterpret_cast<uintptr_t>(P) + 4 <= reinterpret_cast<uintptr_t>(BEnd)) {
H64 ^= (uint64_t)(endian::read32le(P)) * PRIME64_1;
H64 = rotl64(H64, 23) * PRIME64_2 + PRIME64_3;
P += 4;
diff --git a/llvm/unittests/Support/xxhashTest.cpp b/llvm/unittests/Support/xxhashTest.cpp
index 7dc7c40c69ec..f5c49e43df54 100644
--- a/llvm/unittests/Support/xxhashTest.cpp
+++ b/llvm/unittests/Support/xxhashTest.cpp
@@ -12,6 +12,7 @@
using namespace llvm;
TEST(xxhashTest, Basic) {
+ EXPECT_EQ(0xef46db3751d8e999U, xxHash64(StringRef()));
EXPECT_EQ(0x33bf00a859c4ba3fU, xxHash64("foo"));
EXPECT_EQ(0x48a37c90ad27a659U, xxHash64("bar"));
EXPECT_EQ(0x69196c1b3af0bff9U,
More information about the llvm-commits
mailing list