diff --git a/src/main/java/org/apache/commons/codec/digest/MurmurHash3.java b/src/main/java/org/apache/commons/codec/digest/MurmurHash3.java index 45bc4c3351..31433fbc12 100644 --- a/src/main/java/org/apache/commons/codec/digest/MurmurHash3.java +++ b/src/main/java/org/apache/commons/codec/digest/MurmurHash3.java @@ -1030,8 +1030,9 @@ public final void add(final byte[] data, final int offset, final int length) { // main block // remaining - // Check if the unprocessed bytes and new bytes can fill a block of 4 - if (unprocessedLength + length < BLOCK_SIZE) { + // Check if the unprocessed bytes and new bytes can fill a block of 4. + // Make this overflow safe in the event that length is Integer.MAX_VALUE. + if (unprocessedLength + length - BLOCK_SIZE < 0) { // Not enough so add to the unprocessed bytes System.arraycopy(data, offset, unprocessed, unprocessedLength, length); unprocessedLength += length;