The Javadoc of Long.parseUnsignedLong specifies that it should throw a
NumberFormatException if "the value represented by the string is larger
than the largest unsigned long, 2^64-1."
Test:
import java.math.BigInteger;
public class UnsignedLongBug {
public static void main(String[] args) {
try {
String input = "1234567890abcdef1";
System.out.println(Long.parseUnsignedLong(input, 16));
BigInteger maxUnsignedLong =
BigInteger.ONE.shiftLeft(64).subtract(BigInteger.ONE);
BigInteger inputValue = new BigInteger(input, 16);
System.out.println(maxUnsignedLong.compareTo(inputValue));
throw new AssertionError();
} catch (NumberFormatException expected) {
System.out.println("Correct");
}
}
}
Found by: Louis Wasserman <lowasser@google.com>