RFR: 8298033: Character.codePointAt(char[], int, int) doesn't do JavaDoc-specified check [v2]

Sergey Tsypanov stsypanov at openjdk.org
Fri Dec 2 16:13:31 UTC 2022


> 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: Tighten test

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/11480/files
  - new: https://git.openjdk.org/jdk/pull/11480/files/a15bc974..5099c08a

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=11480&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=11480&range=00-01

  Stats: 4 lines in 1 file changed: 0 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/11480.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11480/head:pull/11480

PR: https://git.openjdk.org/jdk/pull/11480


More information about the core-libs-dev mailing list