diff --git a/ksh-1.0.11-ssh-multibyte-long-paste.patch b/ksh-1.0.11-ssh-multibyte-long-paste.patch index 898f69b..afcb1ed 100644 --- a/ksh-1.0.11-ssh-multibyte-long-paste.patch +++ b/ksh-1.0.11-ssh-multibyte-long-paste.patch @@ -1,3 +1,63 @@ +From 4886463bb6d3df2b827d784a97e13c7765d57178 Mon Sep 17 00:00:00 2001 +From: Martijn Dekker +Date: Sat, 12 Feb 2022 21:27:36 +0000 +Subject: [PATCH] Disable broken KEYBD trap for multibyte characters + +In UTF-8 locales, ksh breaks when a KEYBD trap is active, even a +dummy no-op one like 'trap : KEYBD'. Entering multi-byte characters +fails (the input is interrupted and a new prompt is displayed) and +pasting content with multi-byte characters produces corrupted +results. + +The cause is that the KEYBD trap code is not multibyte-ready. +Unfortunately nobody yet understands the edit.c code well enough +to implement a proper fix. Pending that, this commit implements +a workaround that at least avoids breaking the shell. + +src/cmd/ksh93/edit/edit.c: ed_getchar(): +- When a multi-byte locale is active, do not trigger the the KEYBD + trap except for ASCII characters (1-127). + +Resolves: https://github.com/ksh93/ksh/issues/307 + +(cherry-picked from 4886463bb6d3df2b827d784a97e13c7765d57178) +--- + src/cmd/ksh93/edit/edit.c | 5 ++++- + src/cmd/ksh93/sh.1 | 4 ++++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/cmd/ksh93/edit/edit.c b/src/cmd/ksh93/edit/edit.c +index d9933b63bb6a..371f5a9ec8fb 100644 +--- a/src/cmd/ksh93/edit/edit.c ++++ b/src/cmd/ksh93/edit/edit.c +@@ -1122,7 +1122,10 @@ int ed_getchar(register Edit_t *ep,int mode) + killpg(getpgrp(),SIGINT); + siglongjmp(ep->e_env, UINTR); + } +- if(mode<=0 && ep->sh->st.trap[SH_KEYTRAP]) ++ if(mode<=0 && ep->sh->st.trap[SH_KEYTRAP] ++ /* workaround for : ++ * do not trigger KEYBD for non-ASCII in multibyte locale */ ++ && (CC_NATIVE!=CC_ASCII || !mbwide() || c > -128)) + { + ep->e_keytrap = 1; + n=1; +diff --git a/src/cmd/ksh93/sh.1 b/src/cmd/ksh93/sh.1 +index 841c28a43bb8..61f71c2d1698 100644 +--- a/src/cmd/ksh93/sh.1 ++++ b/src/cmd/ksh93/sh.1 +@@ -9062,6 +9062,10 @@ Thus, a trap on + .B CHLD + won't be executed until the foreground job terminates. + .PP ++In locales that use a multibyte character set such as UTF-8, the ++.B KEYBD ++trap is only triggered for ASCII characters (1-127). ++.PP + It is a good idea to leave a space after the comma operator in + arithmetic expressions to prevent the comma from being interpreted + as the decimal point character in certain locales. + From 96d73c08a2786806f3def1fda66641b81e0af988 Mon Sep 17 00:00:00 2001 From: SHIMIZU Akifumi Date: Mon, 7 Apr 2025 19:47:16 +0900 diff --git a/ksh.spec b/ksh.spec index ea72315..da8639f 100644 --- a/ksh.spec +++ b/ksh.spec @@ -6,7 +6,7 @@ Summary: The Original ATT Korn Shell URL: http://www.kornshell.com/ License: EPL-1.0 Version: %{releasedate} -Release: 268%{?dist} +Release: 269%{?dist} Source0: http://www.research.att.com/~gsf/download/tgz/ast-ksh.%{release_date}.tgz Source1: http://www.research.att.com/~gsf/download/tgz/INIT.%{release_date}.tgz Source2: kshcomp.conf @@ -258,6 +258,8 @@ Patch99: %{name}-1.0.7-history-trim.patch # upstream commit: https://github.com/ksh93/ksh/commit/91a7c2e3e9feb8ac1391146ebcda9e6adfcd3cfb Patch100: ksh-20120801-subshell-interrupt-segv.patch +# RHEL-87334 +# upstream commit: https://github.com/ksh93/ksh/commit/4886463bb6d3df2b827d784a97e13c7765d57178 # upstream commit: https://github.com/ksh93/ksh/commit/96d73c08a2786806f3def1fda66641b81e0af988 Patch101: ksh-1.0.11-ssh-multibyte-long-paste.patch @@ -414,6 +416,10 @@ fi %config(noreplace) %{_sysconfdir}/binfmt.d/kshcomp.conf %changelog +* Wed Jun 25 2025 Lukáš Zaoral - 20120801-269 +- Further fix long multibyte characters paste issue via ssh + Resolves: RHEL-87334 + * Tue Apr 22 2025 Vincent Mihalkovic - 20120801-268 - Fix long multibyte characters paste issue via ssh Resolves: RHEL-87334