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

Reply via email to