Merge "String : Fix integer overflow in getChars."
diff --git a/luni/src/test/java/libcore/java/lang/StringTest.java b/luni/src/test/java/libcore/java/lang/StringTest.java
index 2ba6109..1f3320c 100644
--- a/luni/src/test/java/libcore/java/lang/StringTest.java
+++ b/luni/src/test/java/libcore/java/lang/StringTest.java
@@ -425,4 +425,16 @@
assertEquals(7, hello.codePointCount(5, 12));
assertEquals(2, hello.codePointCount(10, 12));
}
+
+ // http://b/26444984
+ public void testGetCharsOverflow() {
+ int srcBegin = Integer.MAX_VALUE; //2147483647
+ int srcEnd = srcBegin + 10; //-2147483639
+ try {
+ // The output array size must be larger than |srcEnd - srcBegin|.
+ "yes".getChars(srcBegin, srcEnd, new char[256], 0);
+ fail();
+ } catch (IllegalArgumentException expected) {
+ }
+ }
}
diff --git a/ojluni/src/main/java/java/lang/String.java b/ojluni/src/main/java/java/lang/String.java
index a0329b0..5023da8 100755
--- a/ojluni/src/main/java/java/lang/String.java
+++ b/ojluni/src/main/java/java/lang/String.java
@@ -730,7 +730,7 @@
}
int count = srcEnd - srcBegin;
- if (count < 0) {
+ if (srcEnd < srcBegin) {
throw new StringIndexOutOfBoundsException(this, srcBegin, count);
}