Further fix long multibyte characters paste issue via ssh
Resolves: RHEL-87334
This commit is contained in:
parent
827e22a8ad
commit
292d2231cb
@ -1,3 +1,63 @@
|
||||
From 4886463bb6d3df2b827d784a97e13c7765d57178 Mon Sep 17 00:00:00 2001
|
||||
From: Martijn Dekker <martijn@inlv.org>
|
||||
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 <https://github.com/ksh93/ksh/issues/307>:
|
||||
+ * 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 <shimizu.akifumi@fujitsu.com>
|
||||
Date: Mon, 7 Apr 2025 19:47:16 +0900
|
||||
|
8
ksh.spec
8
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 <lzaoral@redhat.com> - 20120801-269
|
||||
- Further fix long multibyte characters paste issue via ssh
|
||||
Resolves: RHEL-87334
|
||||
|
||||
* Tue Apr 22 2025 Vincent Mihalkovic <vmihalko@redhat.com> - 20120801-268
|
||||
- Fix long multibyte characters paste issue via ssh
|
||||
Resolves: RHEL-87334
|
||||
|
Loading…
Reference in New Issue
Block a user