From 701b5ccd5ca8ccb426046c6bc7c86279e29b5ae0 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Wed, 13 Oct 2021 22:53:15 +0500 Subject: [PATCH] Fixed: Fix ArrayIndexOutOfBoundsException thrown because length was less than 0 when selecting text from terminal buffer java.lang.ArrayIndexOutOfBoundsException: src.length=132 srcPos=90 dst.length=16 dstPos=0 length=-2 at java.lang.System.arraycopy(System.java:469) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:597) at java.lang.StringBuilder.append(StringBuilder.java:191) at com.termux.terminal.TerminalBuffer.getSelectedText(TerminalBuffer.java:97) at com.termux.terminal.TerminalBuffer.getSelectedText(TerminalBuffer.java:57) at com.termux.terminal.TerminalBuffer.getSelectedText(TerminalBuffer.java:53) at com.termux.terminal.TerminalEmulator.getSelectedText(TerminalEmulator.java:2401) at com.termux.view.textselection.TextSelectionCursorController$1.onActionItemClicked(TextSelectionCursorController.java:140) --- .../src/main/java/com/termux/terminal/TerminalBuffer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java index 8b898434..4a74ee6f 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalBuffer.java @@ -93,8 +93,11 @@ public final class TerminalBuffer { if (c != ' ') lastPrintingCharIndex = i; } } - if (lastPrintingCharIndex != -1) - builder.append(line, x1Index, lastPrintingCharIndex - x1Index + 1); + + int len = lastPrintingCharIndex - x1Index + 1; + if (lastPrintingCharIndex != -1 && len > 0) + builder.append(line, x1Index, len); + boolean lineFillsWidth = lastPrintingCharIndex == x2Index - 1; if ((!joinBackLines || !rowLineWrap) && (!joinFullLines || !lineFillsWidth) && row < selY2 && row < mScreenRows - 1) builder.append('\n');