[ https://issues.apache.org/jira/browse/CODEC-269?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex Herbert updated CODEC-269: ------------------------------- Summary: Allow repeat calls to IncrementalHash32.end() to generate the same value. (was: MurmurHash3.IncrementalHash32) > Allow repeat calls to IncrementalHash32.end() to generate the same value. > ------------------------------------------------------------------------- > > 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 > Priority: Trivial > > 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)