From 287fbc5fb5979858592cf5bcd971daff90c63407 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Tue, 8 Aug 2023 13:42:08 +0800 Subject: [PATCH] fixes #22387; Undefined behavior when with hash(...) (#22404) * fixes #22387; Undefined behavior when with hash(...) * fixes vm * fixes nimscript (cherry picked from commit 47d06d3d4cb85a0c7c2273864f6088a5e8521f44) --- lib/pure/hashes.nim | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/pure/hashes.nim b/lib/pure/hashes.nim index daa7f93661..ad164d6d31 100644 --- a/lib/pure/hashes.nim +++ b/lib/pure/hashes.nim @@ -319,16 +319,24 @@ proc murmurHash(x: openArray[byte]): Hash = h1: uint32 i = 0 + + template impl = + var j = stepSize + while j > 0: + dec j + k1 = (k1 shl 8) or (ord(x[i+j])).uint32 + # body while i < n * stepSize: var k1: uint32 - when defined(js) or defined(sparc) or defined(sparc64): - var j = stepSize - while j > 0: - dec j - k1 = (k1 shl 8) or (ord(x[i+j])).uint32 + + when nimvm: + impl() else: - k1 = cast[ptr uint32](unsafeAddr x[i])[] + when declared(copyMem): + copyMem(addr k1, addr x[i], 4) + else: + impl() inc i, stepSize k1 = imul(k1, c1)