On Tue, 6 Dec 2022 15:28:24 GMT, Sergey Tsypanov <stsypa...@openjdk.org> wrote:
>> I found out that this code >> >> public class Main { >> public static void main(String[] args) { >> String s = "Hello world!"; >> char[] chars = s.toCharArray(); >> int point = Character.codePointAt(chars, -1, 1); >> } >> } >> >> throws `ArrayIndexOutOfBoundsException` instead of JavaDoc-specified >> `IndexOutOfBoundsException`: >> >> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index >> -1 out of bounds for length 12 >> at java.base/java.lang.Character.codePointAtImpl(Character.java:9254) >> at java.base/java.lang.Character.codePointAt(Character.java:9249) >> at org.example.Main.main(Main.java:7) >> >> and the method doesn't check whether `index` parameter is negative: >> >> public static int codePointAt(char[] a, int index, int limit) { >> if (index >= limit || limit < 0 || limit > a.length) { >> throw new IndexOutOfBoundsException(); >> } >> return codePointAtImpl(a, index, limit); >> } >> >> I suggest to check the `index` parameter explicitly instead of relying on >> AIOOBE thrown from accessing the array with negative index. > > Sergey Tsypanov has updated the pull request incrementally with one > additional commit since the last revision: > > 8298033: Fix Character.codePointBefore() src/java.base/share/classes/java/lang/Character.java line 9480: > 9478: */ > 9479: public static int codePointBefore(char[] a, int index, int start) { > 9480: if (index <= start || start < 0 || start >= a.length || index > > a.length) { Since `index > start` it is sufficient to throw `index > a.length`. The check `start >= a.length` is redundant. `0 <= start < index <= a.length` ------------- PR: https://git.openjdk.org/jdk/pull/11480