RFR: 8330462: StringIndexOutOfBoundException when typing anything into TextField [v9]

Andy Goryachev angorya at openjdk.org
Fri Apr 19 18:02:09 UTC 2024


On Fri, 19 Apr 2024 12:43:33 GMT, Oliver Kopp <duke at openjdk.org> wrote:

>> Fixes https://bugs.openjdk.org/browse/JDK-8330462.
>> 
>> If the parameter `maxLength` is larger than `Integer.MAX_VALUE - start`, then an addition of `start` to it leads to a negative value. This is "fixed" by using `Math.max` comparing the `maxLength` and `maxLength + start`.
>
> Oliver Kopp has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix test

modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinTextRangeProvider.java line 2:

> 1: /*
> 2:  * Copyright (c) 2014, 2022, 2024, Oracle and/or its affiliates. All rights reserved.

this needs the following form:

Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved.

modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinTextRangeProvider.java line 116:

> 114:             return fixedMaxEnd;
> 115:         }
> 116:     }

Frankly, I have hard time understanding this code (maybe a comment describing what the method does and why might help).

It looks to me that all we need to do is to guard against a very large maxLength (which for some reason called here 'requestedSteps' which does not seem right - should the last two arguments be swapped?)


public static int getEndIndex(int start, int length, int maxLength) {
  if(length > maxLength) {
    length = maxLength;
  }
  return start + length;
}


That is, I assume we don't have to worry about start + fixedLength overflowing, we just need to make sure we don't go beyond maxLength.  Or is my assumption wrong and start can be negative, or start+fixedLength might overflow?

modules/javafx.graphics/src/main/java/com/sun/glass/ui/win/WinTextRangeProvider.java line 378:

> 376:         if (text == null) return null;
> 377:         validateRange(text);
> 378:         int endOffset = getValidStringIndex(start, maxLength, end);

If I presume the arguments are (start, length, maxLength), the last two arguments on this line only need to be swapped.  They seem to be correct on LL 394, 498.

modules/javafx.graphics/src/test/java/test/com/sun/glass/ui/win/WinTextRangeProviderTest.java line 29:

> 27: import org.junit.Test;
> 28: import static org.junit.Assert.*;
> 29: import com.sun.glass.ui.win.WinTextRangeProvider;

since it's a new test, would it be possible to convert it to junit5?

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1442#discussion_r1572691354
PR Review Comment: https://git.openjdk.org/jfx/pull/1442#discussion_r1572723728
PR Review Comment: https://git.openjdk.org/jfx/pull/1442#discussion_r1572725583
PR Review Comment: https://git.openjdk.org/jfx/pull/1442#discussion_r1572692653


More information about the openjfx-dev mailing list