From f6c9b8243e719f6e3ee632fc1b9bf54bfbcbf76c Mon Sep 17 00:00:00 2001 From: mimimi085181 Date: Tue, 17 Feb 2015 22:34:45 +0100 Subject: [PATCH] GetCRC32: Fix the hash for the last byte(s) This fixes issue 8227 https://code.google.com/p/dolphin-emu/issues/detail?id=8227 --- Source/Core/Common/Hash.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Source/Core/Common/Hash.cpp b/Source/Core/Common/Hash.cpp index 4a0df743be..63caced040 100644 --- a/Source/Core/Common/Hash.cpp +++ b/Source/Core/Common/Hash.cpp @@ -252,9 +252,14 @@ u64 GetCRC32(const u8 *src, u32 len, u32 samples) if (data < end - Step * 2) h[2] = _mm_crc32_u64(h[2], data[Step * 2]); - const u8 *data2 = (const u8*)end; + if (len & 7) + { + u64 temp = 0; + memcpy(&temp, end, len & 7); + h[0] = _mm_crc32_u64(h[0], temp); + } + // FIXME: is there a better way to combine these partial hashes? - h[0] = _mm_crc32_u64(h[0], u64(data2[0])); return h[0] + (h[1] << 10) + (h[2] << 21) + (h[3] << 32); #else return 0;