Repository: activemq Updated Branches: refs/heads/activemq-5.14.x e0c70b843 -> bf7a19eea
https://issues.apache.org/jira/browse/AMQ-6431 Fixing BitArrayBin to not overflow in certain cases with numbers larger than Int max (cherry picked from commit 09456480b838efd97297679840d33f7949449e21) Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/bf7a19ee Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/bf7a19ee Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/bf7a19ee Branch: refs/heads/activemq-5.14.x Commit: bf7a19eead5ed9fac08f4220a3ec82dc6abdb7e3 Parents: e0c70b8 Author: Christopher L. Shannon (cshannon) <[email protected]> Authored: Fri Sep 23 14:30:37 2016 -0400 Committer: Christopher L. Shannon (cshannon) <[email protected]> Committed: Fri Sep 23 14:31:23 2016 -0400 ---------------------------------------------------------------------- .../main/java/org/apache/activemq/util/BitArrayBin.java | 2 +- .../java/org/apache/activemq/util/BitArrayBinTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/bf7a19ee/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java ---------------------------------------------------------------------- diff --git a/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java b/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java index d988ae1..e19b817 100755 --- a/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java +++ b/activemq-client/src/main/java/org/apache/activemq/util/BitArrayBin.java @@ -144,7 +144,7 @@ public class BitArrayBin implements Serializable { private int getBin(long index) { int answer = 0; if (longFirstIndex < 0) { - longFirstIndex = (int) (index - (index % BitArray.LONG_SIZE)); + longFirstIndex = (index - (index % BitArray.LONG_SIZE)); } else if (longFirstIndex >= 0) { answer = (int)((index - longFirstIndex) / BitArray.LONG_SIZE); } http://git-wip-us.apache.org/repos/asf/activemq/blob/bf7a19ee/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java ---------------------------------------------------------------------- diff --git a/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java b/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java index 2b17d8f..07e653d 100644 --- a/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java +++ b/activemq-client/src/test/java/org/apache/activemq/util/BitArrayBinTest.java @@ -171,4 +171,14 @@ public class BitArrayBinTest { toTest.setBit(largeNum, true); assertTrue("set", toTest.getBit(largeNum)); } + + //This test is slightly different in that it doesn't set bit 1 to + //true as above which was causing a different result before AMQ-6431 + @Test + public void testLargeNumber2() { + BitArrayBin toTest = new BitArrayBin(1024); + long largeNum = Integer.MAX_VALUE * 2L + 100L; + toTest.setBit(largeNum, true); + assertTrue(toTest.getBit(largeNum)); + } }
