On Fri, 7 Oct 2022 09:00:32 GMT, Prasanta Sadhukhan <psadhuk...@openjdk.org> wrote:
>> 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 fix test/jdk/javax/swing/text/AbstractDocument/TestUndoInsertArabicText.java line 38: > 36: import javax.swing.undo.UndoManager; > 37: > 38: public class TestUndoInsertArabicText { Updated test to test insertion and undoing at beginning and middle, in addition to end of text ------------- PR: https://git.openjdk.org/jdk/pull/10446