From 75a324fbbe318677165b086f2f54ef7ff4af9a29 Mon Sep 17 00:00:00 2001 From: jjgarcia Date: Fri, 30 May 2008 23:51:44 +0000 Subject: [PATCH] The last 12 bytes of a string were not used for the hash --- src/c/newhash.h | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/c/newhash.h b/src/c/newhash.h index 5708de610..770d575fe 100644 --- a/src/c/newhash.h +++ b/src/c/newhash.h @@ -34,19 +34,19 @@ ((cl_index)k[7]<<52)) static cl_index -hash_string(cl_index initval, const unsigned char *k, cl_index len) +hash_string(cl_index initval, const unsigned char *k, cl_index length) { register cl_index a = GOLDEN_RATIO, b = GOLDEN_RATIO, c = initval; - for (; len > 24; ) { + register cl_index len; + for (len = length; len >= 24; len -= 24) { a += extract_word(k); k+=8; b += extract_word(k); k+=8; c += extract_word(k); k+=8; mix(a,b,c); - len -= 24; } /*------------------------------------- handle the last 11 bytes */ - c += len; + c += length; switch(len) { /* all the case statements fall through */ case 23: c+=((cl_index)k[22]<<52); @@ -101,21 +101,20 @@ hash_string(cl_index initval, const unsigned char *k, cl_index len) #define extract_word(k) \ (k[0]+((cl_index)k[1]<<8)+((cl_index)k[2]<<16)+((cl_index)k[3]<<24)) - static cl_index -hash_string(cl_index initval, const unsigned char *k, cl_index len) +hash_string(cl_index initval, const unsigned char *k, cl_index length) { register cl_index a = GOLDEN_RATIO, b = GOLDEN_RATIO, c = initval; - for (; len > 12; ) { + register cl_index len; + for (len = length; len >= 12; len -= 12) { a += extract_word(k); k += 4; b += extract_word(k); k += 4; c += extract_word(k); k += 4; mix(a,b,c); - len -= 12; } /*------------------------------------- handle the last 11 bytes */ - c += len; + c += length; switch(len) { /* all the case statements fall through */ case 11: c+=((cl_index)k[10]<<24);