RFR: 5080391: ArrayIndexOutOfBounds during "undo" of Right-to-Left text insert [v3]
Prasanta Sadhukhan
psadhukhan at openjdk.org
Tue Oct 11 05:40:40 UTC 2022
> javax.swing.text.AbstractDocument$BranchElement.replace(...) method throws an `ArrayIndexOutOfBoundsException: arraycopy: length -1 is negative` when using an UndoManager on the default document of a JTextArea and you try to undo the insertion of a LEFT-TO-RIGHT language (e.g. Arabic) that is immediately followed by setting the component orientation on the JTextArea.
>
> This is because System.arrayCopy() is called with -ve length because of the calculation done in AbstractDocment.replace where `src` is of 2bytes because of unicode text causing `nmove` to become -ve if `nchildren` is 1 (an unicode character is inserted)
>
> System.arrayCopy throws `IndexOutOfBoundsException if:
>
> The srcPos argument is negative.
> The destPos argument is negative.
> The length argument is negative
>
>
> so the fix is made to make nmove, src, dest +ve
> Also, Element.getElement() can return null which is not checked, causing NPE, if deletion of text is done which results in no element, which is also fixed in the PR
>
> All jtreg testsuite tests are run without any regression.
Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
Test update
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/10446/files
- new: https://git.openjdk.org/jdk/pull/10446/files/8e07fdc3..6414cdb3
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=10446&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=10446&range=01-02
Stats: 81 lines in 1 file changed: 54 ins; 5 del; 22 mod
Patch: https://git.openjdk.org/jdk/pull/10446.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/10446/head:pull/10446
PR: https://git.openjdk.org/jdk/pull/10446
More information about the client-libs-dev
mailing list