RFR: 8303026: [TextField] IOOBE on setting text with control characters that replaces existing text

Andy Goryachev angorya at openjdk.org
Tue Feb 21 23:38:31 UTC 2023


On Tue, 21 Feb 2023 23:11:52 GMT, Jose Pereda <jpereda at 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


More information about the openjfx-dev mailing list