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