From eafb4e3f00627989834e6b651551301e959d7f41 Mon Sep 17 00:00:00 2001 From: Raghav Ramesh Date: Fri, 27 Nov 2015 16:00:52 +0000 Subject: [PATCH] Fixing bug related to int overflow as described by this issue raised by hossman: https://github.com/aggregateknowledge/java-hll/issues/17 --- .../hll/serialization/BigEndianAscendingWordDeserializer.java | 2 +- .../hll/serialization/BigEndianAscendingWordSerializer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordDeserializer.java b/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordDeserializer.java index 5bbaa6a..6b04771 100644 --- a/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordDeserializer.java +++ b/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordDeserializer.java @@ -100,7 +100,7 @@ private long readWord(final int position) { } // First bit of the word - final long firstBitIndex = (position * wordLength); + final long firstBitIndex = ((long)position) * ((long)wordLength); final int firstByteIndex = (bytePadding + (int)(firstBitIndex / BITS_PER_BYTE)); final int firstByteSkipBits = (int)(firstBitIndex % BITS_PER_BYTE); diff --git a/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordSerializer.java b/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordSerializer.java index 3ad7ce1..367e677 100644 --- a/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordSerializer.java +++ b/src/main/java/net/agkn/hll/serialization/BigEndianAscendingWordSerializer.java @@ -86,7 +86,7 @@ public BigEndianAscendingWordSerializer(final int wordLength, final int wordCoun this.wordLength = wordLength; this.wordCount = wordCount; - final long bitsRequired = (wordLength * wordCount); + final long bitsRequired = ((long)wordLength) * ((long)wordCount); final boolean leftoverBits = ((bitsRequired % BITS_PER_BYTE) != 0); final int bytesRequired = (int)(bitsRequired / BITS_PER_BYTE) + (leftoverBits ? 1 : 0) + bytePadding; bytes = new byte[bytesRequired];