commit | 6c7dce0df8c3097fdabeab1220001d48450462d4 | [log] [tgz] |
---|---|---|
author | Andrei Korzhevskii <a.korzhevskiy@gmail.com> | Tue Nov 10 21:37:18 2015 +0300 |
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | Tue Nov 10 21:46:44 2015 +0000 |
tree | 516b0e6c94b307056cecdcf0fe6c48366d573f6d | |
parent | 0b0723f8a676eed698457852fd220a91e13d8674 [diff] |
Fix int overflow in BigInteger.intValue() Change-Id: I4e83ef2905fa5af34831e0bd0381341fbf4320d7
diff --git a/user/super/com/google/gwt/emul/java/math/BigInteger.java b/user/super/com/google/gwt/emul/java/math/BigInteger.java index a60560c..600c873 100644 --- a/user/super/com/google/gwt/emul/java/math/BigInteger.java +++ b/user/super/com/google/gwt/emul/java/math/BigInteger.java
@@ -894,7 +894,9 @@ */ @Override public int intValue() { - return (sign * digits[0]); + int i = digits[0]; + // i is always positive except for Integer.MIN_VALUE because of int overflow + return (sign > 0 || i == Integer.MIN_VALUE) ? i : -i; } /**
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java index 38f7283..2ca911c 100644 --- a/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java +++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java
@@ -596,6 +596,10 @@ assertEquals(resInt, aNumber); } + public void testIntValueMinIntValue() { + assertEquals(Integer.MIN_VALUE, BigInteger.valueOf(Integer.MIN_VALUE).intValue()); + } + /** * Convert a positive BigInteger to an integer value. The low digit is * positive