On Tue, 27 Sep 2022 19:42:01 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:
>> DefaultListSelectionModel.removeIndexInterva accepts `int` value which >> allows it to take in Integer.MAX_VALUE theoratically but it does calculation >> with that value which can results in IOOBE. >> Fix is to make sure the calculation stays within bounds. > > src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java > line 695: > >> 693: int rmMaxIndex = Math.max(index0, index1); >> 694: int gapLength = ((rmMaxIndex - rmMinIndex) + 1) > (rmMaxIndex - >> rmMinIndex) >> 695: ? ((rmMaxIndex - rmMinIndex) + 1) : (rmMaxIndex - >> rmMinIndex); > > I wonder if the model supports selections of 0 .. Integer.MAX_VALUE, it > should … but it doesn't. If I call > > selectionModel.setSelectionInterval(Integer.MAX_VALUE - 1, Integer.MAX_VALUE); > > it never returns, it goes into an infinite loop in `changeSelection` because > the condition `i <= Math.max(setMax, clearMax)` is always `true` if either > `setMax` or `clearMax` is `Integer.MAX_VALUE`. Therefore, we should prevent > that from happening. With that in mind, for `removeIndexInterval`, the value > of `Integer.MAX_VALUE` becomes invalid. > > What will happen if negative values are passed, in particular > `Integer.MIN_VALUE`? For negative values, the spec says "@throws IndexOutOfBoundsException if either index is less than {@code -1}" which it does. ------------- PR: https://git.openjdk.org/jdk/pull/10409