From 1dc3666eab63a4017a9be4f12ad84a839d50cdb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= <vladimir.cunat@nic.cz>
Date: Tue, 6 Apr 2021 18:01:58 +0200
Subject: [PATCH] contrib/murmurhash3: fix occasional undefined behavior

murmurhash3.c:43:40: runtime error: addition of unsigned offset
                     to 0x7ffce41c2014 overflowed to 0x7ffce41c2000
The `i` was used in a super-ugly way; I suspect the only reason was
to optimize that end-loop condition was zero comparison *vomit*
---
 contrib/murmurhash3/murmurhash3.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/contrib/murmurhash3/murmurhash3.c b/contrib/murmurhash3/murmurhash3.c
index 995c2366e..373c6cedc 100644
--- a/contrib/murmurhash3/murmurhash3.c
+++ b/contrib/murmurhash3/murmurhash3.c
@@ -36,11 +36,10 @@ uint32_t hash(const char* data, size_t len_)
     //----------
     // body
 
-    int i;
-    for(i = -nblocks; i; i++)
+    for(int i = 0; i < nblocks; ++i)
     {
         uint32_t k1;
-        memcpy(&k1, data + nblocks * 4 + i * sizeof(k1), sizeof(k1));
+        memcpy(&k1, data + i * sizeof(k1), sizeof(k1));
 
         k1 *= c1;
         k1 = rotl32(k1, 15);
-- 
GitLab