`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.
-------------
Commit messages:
- 83141345: fix overflow in Collections.rotate
Changes: https://git.openjdk.org/jdk/pull/15270/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15270&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8314236
Stats: 52 lines in 2 files changed: 45 ins; 1 del; 6 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