You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Alex Herbert (Jira)" <ji...@apache.org> on 2019/11/21 14:02:00 UTC
[jira] [Created] (CODEC-269) MurmurHash3.IncrementalHash32
Alex Herbert created CODEC-269:
----------------------------------
Summary: MurmurHash3.IncrementalHash32
Key: CODEC-269
URL: https://issues.apache.org/jira/browse/CODEC-269
Project: Commons Codec
Issue Type: Bug
Affects Versions: 1.13
Reporter: Alex Herbert
Assignee: Alex Herbert
The MurmurHash3.IncrementalHash32 end() method alters the current state of the running hash. Thus if called twice it returns different numbers.
This can be fixed using:
{code:java}
public final int end() {
// Allow calling end() again after adding no data to return the same result.
int result = hash;
// ************
// Note: This fails to apply masking using 0xff to the 3 remaining bytes.
// ************
int k1 = 0;
switch (unprocessedLength) {
case 3:
k1 ^= unprocessed[2] << 16;
case 2:
k1 ^= unprocessed[1] << 8;
case 1:
k1 ^= unprocessed[0];
// mix functions
k1 *= C1_32;
k1 = Integer.rotateLeft(k1, R1_32);
k1 *= C2_32;
result ^= k1;
}
// finalization
result ^= totalLen;
return fmix32(result);
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)