Following patch should be vaguely saner, though it may modify the hash a bit.
(note that memcpy destroys any semblance of meaning of using murmurhash2 in any case, so murmurhash2 is complete bullshit in this case) --- src/hash_map.h.orig Tue Jun 4 20:47:31 2013 +++ src/hash_map.h Tue Jul 2 11:17:20 2013 @@ -25,6 +25,24 @@ unsigned int MurmurHash2(const void* key, size_t len) const int r = 24; unsigned int h = seed ^ len; const unsigned char * data = (const unsigned char *)key; + const unsigned char * b = data; + switch(reinterpret_cast<size_t>(data) & 3) { + case 1: + h ^= b[2] << 16; + data++; + len--; + case 2: + h ^= b[1] << 8; + data++; + len--; + case 3: + h ^= b[0]; + h *= m; + data++; + len--; + break; + } + while (len >= 4) { unsigned int k = *(unsigned int *)data; k *= m;