diff options
author | Vladimir Marko <vmarko@google.com> | 2015-01-26 14:06:46 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2015-01-26 14:32:39 +0000 |
commit | 00ca84730a21578dcc6b47bd8e08b78ab9b2dded (patch) | |
tree | 5af68aefc28464ccb209fff525ab2fb374f1d236 /test/082-inline-execute | |
parent | 081d27817608c2ea035f2473c4ea1062a79bccef (diff) | |
download | art-00ca84730a21578dcc6b47bd8e08b78ab9b2dded.zip art-00ca84730a21578dcc6b47bd8e08b78ab9b2dded.tar.gz art-00ca84730a21578dcc6b47bd8e08b78ab9b2dded.tar.bz2 |
Quick: Fix range check for intrinsic String.charAt() on x86.
Bug: 19125146
Change-Id: I274190a7a60cd2e29a854738ed1ec99a9e611969
Diffstat (limited to 'test/082-inline-execute')
-rw-r--r-- | test/082-inline-execute/src/Main.java | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/test/082-inline-execute/src/Main.java b/test/082-inline-execute/src/Main.java index a737ccd..5561a09 100644 --- a/test/082-inline-execute/src/Main.java +++ b/test/082-inline-execute/src/Main.java @@ -130,7 +130,11 @@ public class Main { Assert.assertEquals('N', testStr.charAt(0)); Assert.assertEquals('o', testStr.charAt(1)); Assert.assertEquals(' ', testStr.charAt(10)); - Assert.assertEquals('e', testStr.charAt(testStr.length()-1)); + Assert.assertEquals('e', testStr.charAt(14)); // 14 = testStr.length()-1 as a constant. + Assert.assertEquals('N', test_String_charAt_inner(testStr, 0)); + Assert.assertEquals('o', test_String_charAt_inner(testStr, 1)); + Assert.assertEquals(' ', test_String_charAt_inner(testStr, 10)); + Assert.assertEquals('e', test_String_charAt_inner(testStr, testStr.length()-1)); test_String_charAtExc(); test_String_charAtExc2(); @@ -148,6 +152,33 @@ public class Main { Assert.fail(); } catch (StringIndexOutOfBoundsException expected) { } + try { + testStr.charAt(15); // 15 = "Now is the time".length() + Assert.fail(); + } catch (StringIndexOutOfBoundsException expected) { + } + try { + test_String_charAt_inner(testStr, -1); + Assert.fail(); + } catch (StringIndexOutOfBoundsException expected) { + } + try { + test_String_charAt_inner(testStr, 80); + Assert.fail(); + } catch (StringIndexOutOfBoundsException expected) { + } + try { + test_String_charAt_inner(testStr, 15); // 15 = "Now is the time".length() + Assert.fail(); + } catch (StringIndexOutOfBoundsException expected) { + } + + String strEmpty = ""; + try { + strEmpty.charAt(0); + Assert.fail(); + } catch (StringIndexOutOfBoundsException expected) { + } String strNull = null; try { @@ -157,6 +188,11 @@ public class Main { } } + private static char test_String_charAt_inner(String s, int index) { + // Using non-constant index here (assuming that this method wasn't inlined). + return s.charAt(index); + } + private static void test_String_charAtExc2() { try { test_String_charAtExc3(); |