FULL PRODUCT VERSION :
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin Kernel Version 12.5.0
A DESCRIPTION OF THE PROBLEM :
BitSet with Integer.MAX_VALUE throws exception during toString call.
Example:
BitSet data = new BitSet();
data.set(Integer.MAX_VALUE);
System.out.println(data);
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
BitSet data = new BitSet();
data.set(Integer.MAX_VALUE);
System.out.println(data);
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
{2147483647}
ACTUAL -
java.lang.IndexOutOfBoundsException: fromIndex < 0: -2147483648
at java.util.BitSet.nextSetBit(BitSet.java:709)
at java.util.BitSet.toString(BitSet.java:1189)
at java.lang.String.valueOf(String.java:2979)
at java.io.PrintStream.println(PrintStream.java:821)
at com.max.algs.AlgorithmsMain.<init>(AlgorithmsMain.java:132)
at com.max.algs.AlgorithmsMain.main(AlgorithmsMain.java:141)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.IndexOutOfBoundsException: fromIndex < 0: -2147483648
at java.util.BitSet.nextSetBit(BitSet.java:709)
at java.util.BitSet.toString(BitSet.java:1189)
at java.lang.String.valueOf(String.java:2979)
at java.io.PrintStream.println(PrintStream.java:821)
at com.max.algs.AlgorithmsMain.<init>(AlgorithmsMain.java:132)
at com.max.algs.AlgorithmsMain.main(AlgorithmsMain.java:141)
REPRODUCIBILITY :
This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND :
public String toString() {
checkInvariants();
int numBits = (wordsInUse > 128) ?
cardinality() : wordsInUse * BITS_PER_WORD;
StringBuilder b = new StringBuilder(6*numBits + 2);
b.append('{');
int i = nextSetBit(0);
if (i != -1) {
b.append(i);
if( i != Integer.MAX_VALUE ){
for (i = nextSetBit(i+1); i >= 0 && i != Integer.MAX_VALUE; i = nextSetBit(i+1)) {
b.append(", ").append(i);
}
if( i == Integer.MAX_VALUE ){
b.append(", ").append(i);
}
}
}
b.append('}');
return b.toString();
}
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin Kernel Version 12.5.0
A DESCRIPTION OF THE PROBLEM :
BitSet with Integer.MAX_VALUE throws exception during toString call.
Example:
BitSet data = new BitSet();
data.set(Integer.MAX_VALUE);
System.out.println(data);
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
BitSet data = new BitSet();
data.set(Integer.MAX_VALUE);
System.out.println(data);
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
{2147483647}
ACTUAL -
java.lang.IndexOutOfBoundsException: fromIndex < 0: -2147483648
at java.util.BitSet.nextSetBit(BitSet.java:709)
at java.util.BitSet.toString(BitSet.java:1189)
at java.lang.String.valueOf(String.java:2979)
at java.io.PrintStream.println(PrintStream.java:821)
at com.max.algs.AlgorithmsMain.<init>(AlgorithmsMain.java:132)
at com.max.algs.AlgorithmsMain.main(AlgorithmsMain.java:141)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.IndexOutOfBoundsException: fromIndex < 0: -2147483648
at java.util.BitSet.nextSetBit(BitSet.java:709)
at java.util.BitSet.toString(BitSet.java:1189)
at java.lang.String.valueOf(String.java:2979)
at java.io.PrintStream.println(PrintStream.java:821)
at com.max.algs.AlgorithmsMain.<init>(AlgorithmsMain.java:132)
at com.max.algs.AlgorithmsMain.main(AlgorithmsMain.java:141)
REPRODUCIBILITY :
This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND :
public String toString() {
checkInvariants();
int numBits = (wordsInUse > 128) ?
cardinality() : wordsInUse * BITS_PER_WORD;
StringBuilder b = new StringBuilder(6*numBits + 2);
b.append('{');
int i = nextSetBit(0);
if (i != -1) {
b.append(i);
if( i != Integer.MAX_VALUE ){
for (i = nextSetBit(i+1); i >= 0 && i != Integer.MAX_VALUE; i = nextSetBit(i+1)) {
b.append(", ").append(i);
}
if( i == Integer.MAX_VALUE ){
b.append(", ").append(i);
}
}
}
b.append('}');
return b.toString();
}
- duplicates
-
JDK-8040806 BitSet.toString() can throw IndexOutOfBoundsException
-
- Closed
-