> `Collections.rotate` method contains a bug. This method throws
> IndexOutOfBoundsException on arrays larger than $2^{30}$ elements. The way to
> reproduce:
>
> final int size = (1 << 30) + 1;
> final List<Byte> list = new ArrayList<>(size);
> for (int i = 0; i < size; ++i)
> list.add((byte) 0);
> Collections.rotate(list, size - 1);
>
> Output:
> ```Exception in thread "main" java.lang.IndexOutOfBoundsException: Index
> -2147483648 out of bounds for length 1073741825```
>
> In that case private method `Collections.rotate1` will be called. And the
> line:
> `i += distance;`
> will cause overflow. I fixed this method and wrote a test for it.
>
> I've signed the Oracle Contributor Agreement, but I don't have permission to
> raise a bug in the JDK Bug System.
>
> Kindly ask you to raise a bug.
Nikita Sakharin has updated the pull request with a new target base due to a
merge or a rebase. The incremental webrev excludes the unrelated changes
brought in by the merge/rebase. The pull request contains one additional commit
since the last revision:
fix overflow in Collections.rotate and write tests
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/15270/files
- new: https://git.openjdk.org/jdk/pull/15270/files/b49bf280..a7d7722b
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=15270&range=07
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=15270&range=06-07
Stats: 0 lines in 0 files changed: 0 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/15270.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/15270/head:pull/15270
PR: https://git.openjdk.org/jdk/pull/15270