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)