libmemcached: fix #53 with supplied patch
[awesomized/libmemcached] / libhashkit / murmur.cc
index e15e5108cfa4a8987a42f92410af23bc797708e8..f3e8fe6ac7eebcca2d92d72e69d19e249aed2934 100644 (file)
@@ -56,6 +56,8 @@
 
 #ifdef HAVE_MURMUR_HASH
 
+#include <cstring>
+
 uint32_t hashkit_murmur(const char *key, size_t length, void *context)
 {
   /*
@@ -79,7 +81,8 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context)
 
   while(length >= 4)
   {
-    unsigned int k = *(unsigned int *)data;
+    unsigned int k;
+    memcpy(&k, data, sizeof(unsigned int));
 
     k *= m;
     k ^= k >> r;
@@ -96,8 +99,8 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context)
 
   switch(length)
   {
-  case 3: h ^= ((uint32_t)data[2]) << 16;
-  case 2: h ^= ((uint32_t)data[1]) << 8;
+  case 3: h ^= ((uint32_t)data[2]) << 16;   /* fall through */
+  case 2: h ^= ((uint32_t)data[1]) << 8;    /* fall through */
   case 1: h ^= data[0];
           h *= m;
   default: break;