On Tue, 21 Feb 2023 23:11:52 GMT, Jose Pereda <jper...@openjdk.org> wrote:
> This PR fixes a regression after > [JDK-8212102](https://bugs.openjdk.org/browse/JDK-8212102). > > When a TextField control has some previous content, and new text with only > invalid characters (0x7F, new line, tabs, <0x20) is set, > `TextInputControl::filterInput` is used to strip them out, and the new text > has length 0. > > During the refactoring in JDK-8212102, the checks: > > int length = txt.length(); > if (end > start + length) end = length; > if (start > length-1) start = end = 0; > > were removed. > > In this particular case, when the new filtered text has length 0, we need > those checks, so start and end are set to 0, and txt.substring(start, end) > doesn't throw the IOOBE anymore. > > A test is added to verify this scenario. It fails with the proposed patch, > passes with it. modules/javafx.controls/src/main/java/javafx/scene/control/TextInputControl.java line 185: > 183: int end = sel.getEnd(); > 184: int length = txt.length(); > 185: if (end > start + length) end = length; would it be possible to surround both conditional statements with { }'s? modules/javafx.controls/src/test/java/test/javafx/scene/control/TextFieldTest.java line 546: > 544: } > 545: > 546: @Test public void stripInvalidCharacters() { +1 for unit test! ------------- PR: https://git.openjdk.org/jfx/pull/1043