mirror of
https://github.com/apache/activemq.git
synced 2025-02-27 20:59:06 +00:00
Fixing BitArrayBin to not overflow in certain cases with numbers larger than Int max
This commit is contained in:
parent
18571ce09b
commit
09456480b8
@ -144,7 +144,7 @@ public class BitArrayBin implements Serializable {
|
|||||||
private int getBin(long index) {
|
private int getBin(long index) {
|
||||||
int answer = 0;
|
int answer = 0;
|
||||||
if (longFirstIndex < 0) {
|
if (longFirstIndex < 0) {
|
||||||
longFirstIndex = (int) (index - (index % BitArray.LONG_SIZE));
|
longFirstIndex = (index - (index % BitArray.LONG_SIZE));
|
||||||
} else if (longFirstIndex >= 0) {
|
} else if (longFirstIndex >= 0) {
|
||||||
answer = (int)((index - longFirstIndex) / BitArray.LONG_SIZE);
|
answer = (int)((index - longFirstIndex) / BitArray.LONG_SIZE);
|
||||||
}
|
}
|
||||||
|
@ -171,4 +171,14 @@ public class BitArrayBinTest {
|
|||||||
toTest.setBit(largeNum, true);
|
toTest.setBit(largeNum, true);
|
||||||
assertTrue("set", toTest.getBit(largeNum));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user