From f62997a60e5980ecf4522c4def2c2ef32de31194 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Thu, 14 Oct 2021 00:26:46 +0500 Subject: [PATCH] Fixed: Log exception instead of crashing app on NumberFormatException for invalid termcap/terminfo string requested java.lang.NumberFormatException: For input string: " a" at java.lang.Long.parseLong(Long.java:583) at java.lang.Long.valueOf(Long.java:781) at java.lang.Long.decode(Long.java:933) at com.termux.terminal.TerminalEmulator.doDeviceControl(TerminalEmulator.java:940) at com.termux.terminal.TerminalEmulator.processCodePoint(TerminalEmulator.java:813) --- .../main/java/com/termux/terminal/TerminalEmulator.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java index d37eab8d..8efb949b 100644 --- a/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/terminal-emulator/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -935,10 +935,17 @@ public final class TerminalEmulator { for (String part : dcs.substring(2).split(";")) { if (part.length() % 2 == 0) { StringBuilder transBuffer = new StringBuilder(); + char c; for (int i = 0; i < part.length(); i += 2) { - char c = (char) Long.decode("0x" + part.charAt(i) + "" + part.charAt(i + 1)).longValue(); + try { + c = (char) Long.decode("0x" + part.charAt(i) + "" + part.charAt(i + 1)).longValue(); + } catch (NumberFormatException e) { + Logger.logStackTraceWithMessage(mClient, LOG_TAG, "Invalid device termcap/terminfo encoded name \"" + part + "\"", e); + continue; + } transBuffer.append(c); } + String trans = transBuffer.toString(); String responseValue; switch (trans) {