v2-0001-Add-valgrind-safe-code-to-find-rightmost-bytes.patch
text/x-patch
Filename: v2-0001-Add-valgrind-safe-code-to-find-rightmost-bytes.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0001
Subject: Use valgrind-safe code to find a number of rightmost zero bytes.
| File | + | − |
|---|---|---|
| src/include/common/hashfn_unstable.h | 11 | 5 |
From bac26e0c7ee900246d454dd98de45b3ecefc15ec Mon Sep 17 00:00:00 2001
From: "Anton A. Melnikov" <a.melnikov@postgrespro.ru>
Date: Thu, 16 Jan 2025 02:56:52 +0300
Subject: [PATCH] Use valgrind-safe code to find a number of rightmost zero
bytes.
---
src/include/common/hashfn_unstable.h | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/include/common/hashfn_unstable.h b/src/include/common/hashfn_unstable.h
index a09c0b7d5ce..fa9b954c6b9 100644
--- a/src/include/common/hashfn_unstable.h
+++ b/src/include/common/hashfn_unstable.h
@@ -299,15 +299,21 @@ fasthash_accum_cstring_aligned(fasthash_state *hs, const char *str)
if (firstbyte64(chunk) != 0)
{
- size_t remainder;
+ size_t remainder = 0;
uint64 mask;
/*
- * The byte corresponding to the NUL will be 0x80, so the rightmost
- * bit position will be in the range 15, 23, ..., 63. Turn this into
- * byte position by dividing by 8.
+ * The byte corresponding to the NUL terminator will be the rightmost 0x80.
+ * All zero bytes to the right of it correspond to the tail of the string.
+ * It remains to count them.
*/
- remainder = pg_rightmost_one_pos64(zero_byte_low) / BITS_PER_BYTE;
+ while ((zero_byte_low & 0xFF) == 0)
+ {
+ zero_byte_low >>= 8;
+ ++remainder;
+ }
+
+ Assert(remainder != 0);
/*
* Create a mask for the remaining bytes so we can combine them into
--
2.48.1