!41 new upstream release and update version to 1.0.8
From: @wangyuhang27 Reviewed-by: @openeuler-basic, @licunlong Signed-off-by: @openeuler-basic
This commit is contained in:
commit
a4d40a79b3
@ -1,93 +0,0 @@
|
||||
From 808df797a15d7f363ff8f4ee4249a33876694b4a Mon Sep 17 00:00:00 2001
|
||||
From: Kurtis Rader <krader@skepticism.us>
|
||||
Date: Thu, 12 Dec 2019 18:46:50 -0800
|
||||
Subject: [PATCH] Harden env var imports
|
||||
|
||||
---
|
||||
src/cmd/ksh93/sh/arith.c | 37 +++++++++++++++++++++++++------------
|
||||
src/cmd/ksh93/tests/subshell.sh | 23 +++++++++++++++++++++++
|
||||
2 files changed, 48 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/cmd/ksh93/sh/arith.c b/src/cmd/ksh93/sh/arith.c
|
||||
index 5ca3fce..53eb45e 100644
|
||||
--- a/src/cmd/ksh93/sh/arith.c
|
||||
+++ b/src/cmd/ksh93/sh/arith.c
|
||||
@@ -567,19 +567,32 @@ Sfdouble_t sh_strnum(Shell_t *shp, const char *str, char **ptr, int mode) {
|
||||
char *last;
|
||||
|
||||
if (*str == 0) {
|
||||
- if (ptr) *ptr = (char *)str;
|
||||
- return 0;
|
||||
- }
|
||||
- errno = 0;
|
||||
- d = number(str, &last, shp->inarith ? 0 : 10, NULL);
|
||||
- if (*last) {
|
||||
- if (*last != '.' || last[1] != '.') {
|
||||
- d = strval(shp, str, &last, arith, mode);
|
||||
- Varsubscript = true;
|
||||
+ d = 0.0;
|
||||
+ last = (char *)str;
|
||||
+ } else {
|
||||
+ d = number(str, &last, shp->inarith ? 0 : 10, NULL);
|
||||
+ if (*last && !shp->inarith && sh_isstate(shp, SH_INIT)) {
|
||||
+ // This call is to handle "base#value" literals if we're importing untrusted env vars.
|
||||
+ d = number(str, &last, 0, NULL);
|
||||
+ }
|
||||
+ if (*last) {
|
||||
+ if (sh_isstate(shp, SH_INIT)) {
|
||||
+ // Initializing means importing untrusted env vars. Since the string does not appear
|
||||
+ // to be a recognized numeric literal give up. We can't safely call strval() since
|
||||
+ // that allows arbitrary expressions which would create a security vulnerability.
|
||||
+ d = 0.0;
|
||||
+ } else {
|
||||
+ if (*last != '.' || last[1] != '.') {
|
||||
+ d = strval(shp, str, &last, arith, mode);
|
||||
+ Varsubscript = true;
|
||||
+ }
|
||||
+ if (!ptr && *last && mode > 0) {
|
||||
+ errormsg(SH_DICT, ERROR_exit(1), e_lexbadchar, *last, str);
|
||||
+ }
|
||||
+ }
|
||||
+ } else if (d == 0.0 && *str == '-') {
|
||||
+ d = -0.0;
|
||||
}
|
||||
- if (!ptr && *last && mode > 0) errormsg(SH_DICT, ERROR_exit(1), e_lexbadchar, *last, str);
|
||||
- } else if (!d && *str == '-') {
|
||||
- d = -0.0;
|
||||
}
|
||||
if (ptr) *ptr = last;
|
||||
return d;
|
||||
diff --git a/src/cmd/ksh93/tests/subshell.sh b/src/cmd/ksh93/tests/subshell.sh
|
||||
index b63a805..3faba47 100644
|
||||
--- a/src/cmd/ksh93/tests/subshell.sh
|
||||
+++ b/src/cmd/ksh93/tests/subshell.sh
|
||||
@@ -856,3 +856,26 @@ for exp in 65535 65536
|
||||
do got=$($SHELL -c 'x=$(printf "%.*c" '$exp' x); print ${#x}' 2>&1)
|
||||
[[ $got == $exp ]] || log_error "large command substitution failed" "$exp" "$got"
|
||||
done
|
||||
+
|
||||
+# ==========
|
||||
+# Verify that importing untrusted env vars does not allow evaluating arbitrary expressions but does
|
||||
+# recognize all integer literals recognized by ksh.
|
||||
+expect=8
|
||||
+actual=$(env SHLVL='7' $SHELL -c 'echo $SHLVL')
|
||||
+[[ $actual == $expect ]] || log_error "decimal int literal not recognized" "$expect" "$actual"
|
||||
+
|
||||
+expect=14
|
||||
+actual=$(env SHLVL='013' $SHELL -c 'echo $SHLVL')
|
||||
+[[ $actual == $expect ]] || log_error "leading zeros int literal not recognized" "$expect" "$actual"
|
||||
+
|
||||
+expect=4
|
||||
+actual=$(env SHLVL='2#11' $SHELL -c 'echo $SHLVL')
|
||||
+[[ $actual == $expect ]] || log_error "base#value int literal not recognized" "$expect" "$actual"
|
||||
+
|
||||
+expect=12
|
||||
+actual=$(env SHLVL='16#B' $SHELL -c 'echo $SHLVL')
|
||||
+[[ $actual == $expect ]] || log_error "base#value int literal not recognized" "$expect" "$actual"
|
||||
+
|
||||
+expect=1
|
||||
+actual=$(env SHLVL="2#11+x[\$($bin_echo DANGER WILL ROBINSON >&2)0]" $SHELL -c 'echo $SHLVL')
|
||||
+[[ $actual == $expect ]] || log_error "expression allowed on env var import" "$expect" "$actual"
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,80 +0,0 @@
|
||||
From f967b5a25509d7495445b392307fdaa046e84be7 Mon Sep 17 00:00:00 2001
|
||||
From: Kurtis Rader <krader@skepticism.us>
|
||||
Date: Sun, 26 Jan 2020 21:00:50 -0800
|
||||
Subject: [PATCH] Change default build type to "minsize"
|
||||
|
||||
People (and distros) have been building ksh from this project using the
|
||||
default "debug" build type since we switched from Nmake to Meson. That
|
||||
results in a ksh program whose performance is far from optimal. So change
|
||||
the default build type. If a debugging enabled binary is needed, such as
|
||||
in a CI environment, it must be requested explicitly.
|
||||
|
||||
Related #1449
|
||||
|
||||
(cherry picked from commit db54d369002a0e942d695838986af6bf8962d763)
|
||||
---
|
||||
CHANGELOG.md | 3 +++
|
||||
meson.build | 11 ++++++++++-
|
||||
scripts/build-on-docker.sh | 2 +-
|
||||
scripts/build-on-macos.sh | 2 +-
|
||||
4 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/CHANGELOG.md b/CHANGELOG.md
|
||||
index 0e38b780456e..8657ab1a2a15 100644
|
||||
--- a/CHANGELOG.md
|
||||
+++ b/CHANGELOG.md
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
## Notable fixes and improvements
|
||||
|
||||
+- The default build type is now "minsize" since that dramatically improves the
|
||||
+ performance of ksh. You can still request a debug build via `meson
|
||||
+ --buildtype=debug` (issue #1449).
|
||||
- Fix `history` command behavior when the *~/.sh_history* file has
|
||||
specific content (issue #1432).
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 0e5dc2483fb1..aecfe737c3f1 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -1,4 +1,13 @@
|
||||
-project('ksh93', 'c', default_options: ['b_lundef=false', 'default_library=static'])
|
||||
+project('ksh9', 'c', default_options: [
|
||||
+ # This is the optimal production build type for this project. If you need
|
||||
+ # a debug build you must explicitly run `meson --buildtype=debug`. This
|
||||
+ # helps ensure that each distro (or user) gets a performance optimized build
|
||||
+ # even if they don't know to add the `--buildtype=minsize` option.
|
||||
+ 'buildtype=minsize',
|
||||
+ 'b_lundef=false',
|
||||
+ 'default_library=static',
|
||||
+ 'c_std=c99', # we require the C99 (aka ISO9899:1999) language standard
|
||||
+])
|
||||
|
||||
source_dir = meson.current_source_dir()
|
||||
cc = meson.get_compiler('c')
|
||||
diff --git a/scripts/build-on-docker.sh b/scripts/build-on-docker.sh
|
||||
index cd8138be9ab2..0b5af4a1d698 100755
|
||||
--- a/scripts/build-on-docker.sh
|
||||
+++ b/scripts/build-on-docker.sh
|
||||
@@ -18,7 +18,7 @@ mkdir build
|
||||
cd build
|
||||
|
||||
echo ==== Configuring the build
|
||||
-if ! meson -Dwarnings-are-errors=true
|
||||
+if ! meson -Dwarnings-are-errors=true --buildtype=debug
|
||||
then
|
||||
cat meson-logs/meson-log.txt
|
||||
exit 1
|
||||
diff --git a/scripts/build-on-macos.sh b/scripts/build-on-macos.sh
|
||||
index 2732e370f8d8..163195accfff 100755
|
||||
--- a/scripts/build-on-macos.sh
|
||||
+++ b/scripts/build-on-macos.sh
|
||||
@@ -15,7 +15,7 @@ mkdir build
|
||||
cd build
|
||||
|
||||
echo ==== Configuring the build
|
||||
-if ! meson -Dwarnings-are-errors=true
|
||||
+if ! meson -Dwarnings-are-errors=true --buildtype=debug
|
||||
then
|
||||
cat meson-logs/meson-log.txt
|
||||
exit 1
|
||||
@ -1,120 +0,0 @@
|
||||
From a1e1592ac7028659d09eb3fa6c8a2227cba9f2a9 Mon Sep 17 00:00:00 2001
|
||||
From: Kurtis Rader <krader@skepticism.us>
|
||||
Date: Wed, 8 Jan 2020 19:14:31 -0800
|
||||
Subject: [PATCH] Fix handling of skipped directories
|
||||
|
||||
The bug in `path_opentype()` fixed by this commit may affect other
|
||||
scenarios but we know it affects autoloaded functions. Hence the unit
|
||||
test for that scenario.
|
||||
|
||||
Fixes #1454
|
||||
|
||||
(cherry picked from commit 3bc58164494eecc180e2bad966d7753bfdd1e295)
|
||||
---
|
||||
src/cmd/ksh93/sh/path.c | 16 +++++++++-------
|
||||
src/cmd/ksh93/tests/autoload.sh | 15 +++++++++++++++
|
||||
src/cmd/ksh93/tests/data/skipped_dir | 15 +++++++++++++++
|
||||
src/cmd/ksh93/tests/meson.build | 1 +
|
||||
4 files changed, 40 insertions(+), 7 deletions(-)
|
||||
create mode 100644 src/cmd/ksh93/tests/autoload.sh
|
||||
create mode 100644 src/cmd/ksh93/tests/data/skipped_dir
|
||||
|
||||
diff --git a/src/cmd/ksh93/sh/path.c b/src/cmd/ksh93/sh/path.c
|
||||
index 69382f9..b7869b3 100644
|
||||
--- a/src/cmd/ksh93/sh/path.c
|
||||
+++ b/src/cmd/ksh93/sh/path.c
|
||||
@@ -475,28 +475,30 @@ Pathcomp_t *path_get(Shell_t *shp, const char *name) {
|
||||
//
|
||||
static_fn int path_opentype(Shell_t *shp, const char *name, Pathcomp_t *pp, int fun) {
|
||||
int fd = -1;
|
||||
- struct stat statb;
|
||||
- Pathcomp_t *oldpp;
|
||||
|
||||
if (!pp && !shp->pathlist) path_init(shp);
|
||||
if (!fun && strchr(name, '/') && sh_isoption(shp, SH_RESTRICTED)) {
|
||||
errormsg(SH_DICT, ERROR_exit(1), e_restricted, name);
|
||||
__builtin_unreachable();
|
||||
}
|
||||
+
|
||||
+ // The structure of this loop is slightly odd. It's a consequence of how path_nextcomp() works.
|
||||
+ Pathcomp_t *next_pp = pp;
|
||||
do {
|
||||
- pp = path_nextcomp(shp, oldpp = pp, name, 0);
|
||||
- while (oldpp && (oldpp->flags & PATH_SKIP)) oldpp = oldpp->next;
|
||||
- if (fun && (!oldpp || !(oldpp->flags & PATH_FPATH))) continue;
|
||||
+ pp = next_pp;
|
||||
+ next_pp = path_nextcomp(shp, pp, name, NULL);
|
||||
+ if (pp && (pp->flags & PATH_SKIP)) continue;
|
||||
+ if (fun && (!pp || !(pp->flags & PATH_FPATH))) continue;
|
||||
fd = sh_open(path_relative(shp, stkptr(shp->stk, PATH_OFFSET)), O_RDONLY | O_CLOEXEC, 0);
|
||||
+ struct stat statb;
|
||||
if (fd >= 0 && (fstat(fd, &statb) < 0 || S_ISDIR(statb.st_mode))) {
|
||||
errno = EISDIR;
|
||||
sh_close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
- } while (fd < 0 && pp);
|
||||
+ } while (fd < 0 && next_pp);
|
||||
|
||||
assert(fd < 0 || sh_iovalidfd(shp, fd));
|
||||
-
|
||||
if (fd >= 0 && (fd = sh_iomovefd(shp, fd)) > 0) {
|
||||
(void)fcntl(fd, F_SETFD, FD_CLOEXEC);
|
||||
shp->fdstatus[fd] |= IOCLEX;
|
||||
diff --git a/src/cmd/ksh93/tests/autoload.sh b/src/cmd/ksh93/tests/autoload.sh
|
||||
new file mode 100644
|
||||
index 0000000..6aaa206
|
||||
--- /dev/null
|
||||
+++ b/src/cmd/ksh93/tests/autoload.sh
|
||||
@@ -0,0 +1,15 @@
|
||||
+# Verify the behavior of autoloaded functions.
|
||||
+
|
||||
+# ====================
|
||||
+# Verify that directories in the path search list which should be skipped (e.g., because they don't
|
||||
+# exist) interacts correctly with autoloaded functions.
|
||||
+#
|
||||
+# See https://github.com/att/ast/issues/1454
|
||||
+expect=$"Func cd called with |$TEST_DIR/usr|\n$TEST_DIR/usr"
|
||||
+actual=$($SHELL "$TEST_ROOT/data/skipped_dir")
|
||||
+actual_status=$?
|
||||
+expect_status=0
|
||||
+[[ $actual_status == $expect_status ]] ||
|
||||
+ log_error "autoload function skipped dir test wrong status" "$expect_status" "$actual_status"
|
||||
+[[ $actual == $expect ]] ||
|
||||
+ log_error "autoload function skipped dir test wrong output" "$expect" "$actual"
|
||||
diff --git a/src/cmd/ksh93/tests/data/skipped_dir b/src/cmd/ksh93/tests/data/skipped_dir
|
||||
new file mode 100644
|
||||
index 0000000..b8eeddc
|
||||
--- /dev/null
|
||||
+++ b/src/cmd/ksh93/tests/data/skipped_dir
|
||||
@@ -0,0 +1,15 @@
|
||||
+# See https://github.com/att/ast/issues/1454
|
||||
+
|
||||
+mkdir -p "$TEST_DIR/usr/bin"
|
||||
+print '#!/bin/sh' >"$TEST_DIR/usr/bin/cd"
|
||||
+print 'builtin cd "$@"' >>"$TEST_DIR/usr/bin/cd"
|
||||
+prefix="$TEST_DIR/ksh.$$"
|
||||
+
|
||||
+FPATH="$prefix/bad:$prefix/functions"
|
||||
+mkdir -p "$prefix/functions"
|
||||
+print 'function cd { echo "Func cd called with |$*|"; command cd "$@"; }' >"$prefix/functions/cd"
|
||||
+typeset -fu cd
|
||||
+
|
||||
+PATH="/arglebargle:$PATH:$TEST_DIR/usr/bin:$TEST_DIR/bin"
|
||||
+cd "$TEST_DIR/usr"
|
||||
+pwd
|
||||
diff --git a/src/cmd/ksh93/tests/meson.build b/src/cmd/ksh93/tests/meson.build
|
||||
index 6a07d7c..26f2d43 100644
|
||||
--- a/src/cmd/ksh93/tests/meson.build
|
||||
+++ b/src/cmd/ksh93/tests/meson.build
|
||||
@@ -48,6 +48,7 @@ all_tests = [
|
||||
['arrays'],
|
||||
['arrays2'],
|
||||
['attributes'],
|
||||
+ ['autoload'],
|
||||
['basic', 90],
|
||||
['case'],
|
||||
['comvar'],
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,51 +0,0 @@
|
||||
From a754ce08134f92c6f07e28ce7ec95f33135f2074 Mon Sep 17 00:00:00 2001
|
||||
From: Kurtis Rader <krader@skepticism.us>
|
||||
Date: Thu, 7 Nov 2019 17:48:40 -0800
|
||||
Subject: [PATCH] Fix hist_nearend()
|
||||
|
||||
The original code, prior to the fix for issue #1271, called sfreserve()
|
||||
with just the SF_LOCKR. While fixing the core issue of issue #1271 I
|
||||
noticed the buffer did not have a read/write mode. Which is wrong. What
|
||||
I didn't realize was that is equivalent to read+write. I incorrectly
|
||||
included SF_WRITE rather than SF_RDWR.
|
||||
|
||||
Fixes #1432
|
||||
|
||||
(cherry picked from commit b2e48a99ec6e2622c9e653bc64f334b2bdcff0f9)
|
||||
|
||||
---
|
||||
CHANGELOG.md | 7 +++++++
|
||||
src/cmd/ksh93/edit/history.c | 2 +-
|
||||
2 files changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CHANGELOG.md b/CHANGELOG.md
|
||||
index 0f1fcaf3..0e38b780 100644
|
||||
--- a/CHANGELOG.md
|
||||
+++ b/CHANGELOG.md
|
||||
@@ -1,3 +1,10 @@
|
||||
+# ksh 2020.0.1
|
||||
+
|
||||
+## Notable fixes and improvements
|
||||
+
|
||||
+- Fix `history` command behavior when the *~/.sh_history* file has
|
||||
+ specific content (issue #1432).
|
||||
+
|
||||
# ksh 2020.0.0
|
||||
|
||||
This documents changes since the AST code, which includes the `ksh` program,
|
||||
diff --git a/src/cmd/ksh93/edit/history.c b/src/cmd/ksh93/edit/history.c
|
||||
index 50ac06a6..7c207c26 100644
|
||||
--- a/src/cmd/ksh93/edit/history.c
|
||||
+++ b/src/cmd/ksh93/edit/history.c
|
||||
@@ -365,7 +365,7 @@ static int hist_nearend(History_t *hp, Sfio_t *iop, off_t size) {
|
||||
// Skip to marker command and return the number. Numbering commands occur after a null and begin
|
||||
// with HIST_CMDNO.
|
||||
while (true) {
|
||||
- cp = buff = (unsigned char *)sfreserve(iop, SF_UNBOUND, SF_LOCKR | SF_WRITE);
|
||||
+ cp = buff = (unsigned char *)sfreserve(iop, SF_UNBOUND, SF_LOCKR | SF_RDWR);
|
||||
if (!cp) break;
|
||||
|
||||
n = sfvalue(iop);
|
||||
--
|
||||
2.19.1
|
||||
|
||||
@ -1,164 +0,0 @@
|
||||
From c8a66c70b51f11bfcaeef22dd17b9b86ea1c3dfe Mon Sep 17 00:00:00 2001
|
||||
From: Kurtis Rader <krader@skepticism.us>
|
||||
Date: Tue, 21 Jan 2020 18:21:08 -0800
|
||||
Subject: [PATCH] Fix interactive restricted shell behavior
|
||||
|
||||
Fixes #1459
|
||||
|
||||
(cherry picked from commit 1fd82bddfd36c8d381d4eb75bc1e6b2d4ccb6750)
|
||||
|
||||
---
|
||||
scripts/create_rksh_symlink | 8 +++++
|
||||
src/cmd/ksh93/edit/edit.c | 2 ++
|
||||
src/cmd/ksh93/meson.build | 6 ++++
|
||||
src/cmd/ksh93/tests/meson.build | 6 ++--
|
||||
src/cmd/ksh93/tests/restricted.exp | 29 +++++++++++++++++++
|
||||
src/cmd/ksh93/tests/restricted.exp.out | 1 +
|
||||
.../ksh93/tests/util/interactive.expect.rc | 1 +
|
||||
7 files changed, 51 insertions(+), 2 deletions(-)
|
||||
create mode 100755 scripts/create_rksh_symlink
|
||||
create mode 100644 src/cmd/ksh93/tests/restricted.exp
|
||||
create mode 100644 src/cmd/ksh93/tests/restricted.exp.out
|
||||
|
||||
diff --git a/scripts/create_rksh_symlink b/scripts/create_rksh_symlink
|
||||
new file mode 100755
|
||||
index 00000000..03c013c4
|
||||
--- /dev/null
|
||||
+++ b/scripts/create_rksh_symlink
|
||||
@@ -0,0 +1,8 @@
|
||||
+#!/bin/sh
|
||||
+# This is used by a Meson custom_target() to create a "rksh" symlink to the
|
||||
+# "ksh" binary. This is slightly convoluted to support platforms, such as
|
||||
+# Cygwin, where the ksh binary might have an extension such as ".exe".
|
||||
+cmd=$(basename "$1")
|
||||
+cd "$(dirname "$1")" || exit 1
|
||||
+rm -f "r$cmd"
|
||||
+ln -s "$cmd" "r$cmd"
|
||||
diff --git a/src/cmd/ksh93/edit/edit.c b/src/cmd/ksh93/edit/edit.c
|
||||
index 666719a9..9c62b1a7 100644
|
||||
--- a/src/cmd/ksh93/edit/edit.c
|
||||
+++ b/src/cmd/ksh93/edit/edit.c
|
||||
@@ -451,9 +451,11 @@ void ed_setup(Edit_t *ep, int fd, int reedit) {
|
||||
if (!ep->e_term) ep->e_term = nv_search("TERM", shp->var_tree, 0);
|
||||
if (ep->e_term && (term = nv_getval(ep->e_term)) && strlen(term) < sizeof(ep->e_termname) &&
|
||||
strcmp(term, ep->e_termname)) {
|
||||
+ // Avoid an error from the 2>/dev/null redirection in a restricted shell.
|
||||
bool r = sh_isoption(shp, SH_RESTRICTED);
|
||||
if (r) sh_offoption(shp, SH_RESTRICTED);
|
||||
sh_trap(shp, ".sh.subscript=$(tput cuu1 2>/dev/null)", 0);
|
||||
+ if (r) sh_onoption(shp, SH_RESTRICTED);
|
||||
pp = nv_getval(SH_SUBSCRNOD);
|
||||
if (pp) {
|
||||
// It should be impossible for the cursor up string to be truncated.
|
||||
diff --git a/src/cmd/ksh93/meson.build b/src/cmd/ksh93/meson.build
|
||||
index 491fb9b5..74ace1c7 100644
|
||||
--- a/src/cmd/ksh93/meson.build
|
||||
+++ b/src/cmd/ksh93/meson.build
|
||||
@@ -32,6 +32,11 @@ ksh93_exe = executable('ksh', ['sh/pmain.c'], c_args: shared_c_args,
|
||||
dependencies: [libm_dep, libexecinfo_dep, libdl_dep],
|
||||
install: true)
|
||||
|
||||
+# Create a symlink for a restricted version of the ksh shell.
|
||||
+create_rksh_symlink = find_program(source_dir + '/scripts/create_rksh_symlink')
|
||||
+rksh93_exe = custom_target('rksh', input: ksh93_exe, output: 'rksh', build_by_default: true,
|
||||
+ command: [create_rksh_symlink, '@INPUT@'])
|
||||
+
|
||||
shcomp_exe = executable('shcomp', ['sh/shcomp.c'], c_args: shared_c_args,
|
||||
include_directories: [configuration_incdir, ksh93_incdir],
|
||||
link_with: [libksh, libast, libcmd, libdll],
|
||||
@@ -47,6 +52,7 @@ test_driver = join_paths(test_dir, 'util', 'run_test.sh')
|
||||
src_root = 'SRC_ROOT=' + source_dir
|
||||
test_root = 'TEST_ROOT=' + test_dir
|
||||
shell_var = 'SHELL=' + ksh93_exe.full_path()
|
||||
+rshell_var = 'RSHELL=' + rksh93_exe.full_path()
|
||||
shcomp_var = 'SHCOMP=' + shcomp_exe.full_path()
|
||||
|
||||
libast_build_dir = join_paths(build_dir, 'src', 'lib', 'libast')
|
||||
diff --git a/src/cmd/ksh93/tests/meson.build b/src/cmd/ksh93/tests/meson.build
|
||||
index 26f2d43c..4f81ef3c 100644
|
||||
--- a/src/cmd/ksh93/tests/meson.build
|
||||
+++ b/src/cmd/ksh93/tests/meson.build
|
||||
@@ -81,6 +81,7 @@ all_tests = [
|
||||
['readcsv'],
|
||||
['recttype'],
|
||||
['restricted'],
|
||||
+ ['restricted.exp'],
|
||||
['rksh'],
|
||||
['select'],
|
||||
['sh_match', 120],
|
||||
@@ -163,7 +164,8 @@ foreach testspec : all_tests
|
||||
lang_var = 'LANG=en_US.UTF-8'
|
||||
test(test_name, ksh93_exe, timeout: timeout, is_parallel: parallel,
|
||||
args: [test_driver, test_name],
|
||||
- env: [shell_var, lang_var, src_root, test_root, ld_library_path, libsample_path])
|
||||
+ env: [shell_var, lang_var, src_root, test_root, ld_library_path, libsample_path,
|
||||
+ rshell_var])
|
||||
|
||||
# The shcomp variants are only applicable to the non-interactive tests.
|
||||
if not test_name.endswith('.exp')
|
||||
@@ -180,7 +182,7 @@ foreach testspec : all_tests
|
||||
test(test_name + '/shcomp', ksh93_exe, timeout: timeout, is_parallel: parallel,
|
||||
args: [ test_driver, 'shcomp', test_name],
|
||||
env: [shell_var, lang_var, src_root, test_root, shcomp_var, ld_library_path,
|
||||
- libsample_path])
|
||||
+ rshell_var, libsample_path])
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
diff --git a/src/cmd/ksh93/tests/restricted.exp b/src/cmd/ksh93/tests/restricted.exp
|
||||
new file mode 100644
|
||||
index 00000000..4192675b
|
||||
--- /dev/null
|
||||
+++ b/src/cmd/ksh93/tests/restricted.exp
|
||||
@@ -0,0 +1,29 @@
|
||||
+# vim: set filetype=expect:
|
||||
+#
|
||||
+# Interactive tests of restricted shell behavior. This is primarily to avoid regressions of
|
||||
+# https://github.com/att/ast/issues/1459. It doesn't need to be a comprehensive test of restricted
|
||||
+# shell behavior. That is already done in unit test restricted.sh.
|
||||
+set pid [spawn $rksh]
|
||||
+expect_prompt
|
||||
+# Terminal rows and columns may default to zero so ensure sane values.
|
||||
+send "stty rows 24 cols 80\r"
|
||||
+expect_prompt
|
||||
+
|
||||
+# ==========
|
||||
+# Changing a restricted env var should be an error.
|
||||
+log_test_entry
|
||||
+send "PATH=/bin\r"
|
||||
+expect -re ": PATH: restricted\r\n" {
|
||||
+ puts "modifying PATH is restricted"
|
||||
+}
|
||||
+expect_prompt
|
||||
+
|
||||
+# ==========
|
||||
+# Exit the shell.
|
||||
+log_test_entry
|
||||
+send "\r"
|
||||
+expect_prompt
|
||||
+send [ctrl D]
|
||||
+catch {expect default exp_continue} output
|
||||
+log_debug "EOF output: $output"
|
||||
+wait
|
||||
diff --git a/src/cmd/ksh93/tests/restricted.exp.out b/src/cmd/ksh93/tests/restricted.exp.out
|
||||
new file mode 100644
|
||||
index 00000000..d04d3921
|
||||
--- /dev/null
|
||||
+++ b/src/cmd/ksh93/tests/restricted.exp.out
|
||||
@@ -0,0 +1 @@
|
||||
+modifying PATH is restricted
|
||||
diff --git a/src/cmd/ksh93/tests/util/interactive.expect.rc b/src/cmd/ksh93/tests/util/interactive.expect.rc
|
||||
index dd039a21..f30e5e19 100644
|
||||
--- a/src/cmd/ksh93/tests/util/interactive.expect.rc
|
||||
+++ b/src/cmd/ksh93/tests/util/interactive.expect.rc
|
||||
@@ -6,6 +6,7 @@ log_user 0
|
||||
log_file -noappend interactive.tmp.log
|
||||
|
||||
set ksh $env(SHELL)
|
||||
+set rksh $env(RSHELL)
|
||||
set timeout 2
|
||||
set send_human {.05 .1 5 .02 .2}
|
||||
|
||||
--
|
||||
2.19.1
|
||||
|
||||
@ -1,75 +0,0 @@
|
||||
From a82279db9e49d2c42a95853f38061494df06e33c Mon Sep 17 00:00:00 2001
|
||||
From: Kurtis Rader <krader@skepticism.us>
|
||||
Date: Tue, 12 Nov 2019 19:45:34 -0800
|
||||
Subject: [PATCH] `functions` with not loaded autoloaded functions
|
||||
|
||||
If there are functions marked to be autloaded, but not yet loaded, typing
|
||||
`typeset -f` or `functions` dereferences a NULL pointer.
|
||||
|
||||
Fixes #1436
|
||||
|
||||
(cherry picked from commit 7df11dedc5883fa2be1cf217ae6021cac56c81fa)
|
||||
|
||||
---
|
||||
src/cmd/ksh93/bltins/typeset.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/cmd/ksh93/bltins/typeset.c b/src/cmd/ksh93/bltins/typeset.c
|
||||
index 0862ace4..fba305f1 100644
|
||||
--- a/src/cmd/ksh93/bltins/typeset.c
|
||||
+++ b/src/cmd/ksh93/bltins/typeset.c
|
||||
@@ -716,7 +716,6 @@ int setall(char **argv, nvflag_t flag, Dt_t *troot, struct tdata *tp) {
|
||||
static_fn int print_namval(Sfio_t *file, Namval_t *np, bool omit_attrs, struct tdata *tp) {
|
||||
char *cp;
|
||||
int indent = tp->indent, outname = 0, isfun;
|
||||
- struct Ufunction *rp;
|
||||
|
||||
sh_sigcheck(tp->sh);
|
||||
if (tp->noref && nv_isref(np)) return 0;
|
||||
@@ -749,11 +748,13 @@ static_fn int print_namval(Sfio_t *file, Namval_t *np, bool omit_attrs, struct t
|
||||
}
|
||||
}
|
||||
if (isfun) {
|
||||
+ struct Ufunction *rp = FETCH_VT(np->nvalue, rp);
|
||||
Sfio_t *iop = NULL;
|
||||
char *fname = NULL;
|
||||
+
|
||||
if (nv_isattr(np, NV_NOFREE)) return 0;
|
||||
if (!omit_attrs) {
|
||||
- if (!FETCH_VT(np->nvalue, ip)) {
|
||||
+ if (!rp) {
|
||||
sfputr(file, "typeset -fu", ' ');
|
||||
} else if (!nv_isattr(np, NV_FPOSIX)) {
|
||||
sfputr(file, "function", ' ');
|
||||
@@ -763,14 +764,16 @@ static_fn int print_namval(Sfio_t *file, Namval_t *np, bool omit_attrs, struct t
|
||||
if (tp->wctname) cp += strlen(tp->wctname) + 1;
|
||||
sfputr(file, cp, -1);
|
||||
if (nv_isattr(np, NV_FPOSIX)) sfwrite(file, "()", 2);
|
||||
- rp = FETCH_VT(np->nvalue, rp);
|
||||
+
|
||||
+ // Has the function been defined in which case we know where it came from? Or just marked
|
||||
+ // to be autoloaded in which case we know we can't print the definition of the function?
|
||||
if (rp && rp->hoffset >= 0) {
|
||||
fname = rp->fname;
|
||||
} else {
|
||||
- omit_attrs = false;
|
||||
+ omit_attrs = true;
|
||||
}
|
||||
+
|
||||
if (omit_attrs) {
|
||||
- rp = FETCH_VT(np->nvalue, rp);
|
||||
if (tp->pflag && rp && rp->hoffset >= 0) {
|
||||
sfprintf(file, " #line %d %s\n", rp->lineno, fname ? sh_fmtq(fname) : "");
|
||||
} else {
|
||||
@@ -778,7 +781,7 @@ static_fn int print_namval(Sfio_t *file, Namval_t *np, bool omit_attrs, struct t
|
||||
}
|
||||
} else {
|
||||
if (nv_isattr(np, NV_FTMP)) {
|
||||
- fname = 0;
|
||||
+ fname = NULL;
|
||||
iop = tp->sh->heredocs;
|
||||
} else if (fname) {
|
||||
iop = sfopen(iop, fname, "r");
|
||||
--
|
||||
2.19.1
|
||||
|
||||
BIN
ksh-1.0.8.tar.gz
Normal file
BIN
ksh-1.0.8.tar.gz
Normal file
Binary file not shown.
Binary file not shown.
125
ksh.spec
125
ksh.spec
@ -1,101 +1,128 @@
|
||||
Name: ksh
|
||||
Version: 2020.0.0
|
||||
Release: 11
|
||||
Version: 1.0.8
|
||||
Release: 1
|
||||
Summary: The Original ATT Korn Shell
|
||||
License: EPL-1.0
|
||||
License: EPL-2.0
|
||||
URL: http://www.kornshell.com/
|
||||
Epoch: 1
|
||||
Source0: https://github.com/att/ast/releases/download/%{version}/%{name}-%{version}.tar.gz
|
||||
Epoch: 2
|
||||
Source0: https://github.com/ksh93/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||
Source1: kshcomp.conf
|
||||
Source2: kshrc.rhs
|
||||
Source3: dotkshrc
|
||||
|
||||
Patch1: CVE-2019-14868.patch
|
||||
|
||||
Patch6000: backport-Fix-hist_nearend.patch
|
||||
Patch6001: backport-functions-with-not-loaded-autoloaded-functions.patch
|
||||
Patch6002: backport-Fix-interactive-restricted-shell-behavior.patch
|
||||
|
||||
|
||||
Patch9000: skip-some-test.patch
|
||||
|
||||
Patch6003: backport-Fix-handling-of-skipped-directories.patch
|
||||
Patch6004: backport-Change-default-build-type-to-minsize-to-imporve-the-performance.patch
|
||||
|
||||
Provides: /bin/ksh /usr/bin/ksh
|
||||
BuildRequires: meson gcc glibc-devel ed
|
||||
Provides: /bin/ksh /bin/rksh
|
||||
BuildRequires: gcc bison glibc-langpack-ja ncurses procps tzdata util-linux
|
||||
Conflicts: pdksh
|
||||
Requires(post): grep, coreutils, systemd-units chkconfig
|
||||
Requires: coreutils, diffutils
|
||||
Requires(post): grep, coreutils, systemd, chkconfig
|
||||
Requires(preun): chkconfig
|
||||
Requires(postun): sed
|
||||
Provides: ksh-help = %{epoch}:%{version}-%{release}
|
||||
Obsoletes: ksh-help < %{epoch}:%{version}-%{release}
|
||||
|
||||
%description
|
||||
KornShell is an interactive command language that provides access to the UNIX system and to
|
||||
many other systems, on the many different computers and workstations on which it is implemented.
|
||||
KSH-93 is the most recent version of the KornShell by David Korn of AT&T Bell Laboratories.
|
||||
KornShell is a shell programming language, which is upward compatible with "sh" (the Bourne Shell).
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n %{name}-%{version}
|
||||
%autosetup -p1
|
||||
|
||||
%build
|
||||
%meson -Dbuild-api-tests=false
|
||||
%meson_build
|
||||
XTRAFLAGS=""
|
||||
for f in -Wno-unknown-pragmas -Wno-missing-braces -Wno-unused-result -Wno-return-type -Wno-int-to-pointer-cast -Wno-parentheses -Wno-unused -Wno-unused-but-set-variable -Wno-cpp -Wno-maybe-uninitialized -Wno-lto-type-mismatch
|
||||
do
|
||||
$CC $f -E - </dev/null >/dev/null 2>&1 && XTRAFLAGS="$XTRAFLAGS $f"
|
||||
done
|
||||
export CCFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing $XTRAFLAGS"
|
||||
export LDFLAGS="$RPM_LD_FLAGS"
|
||||
bin/package make
|
||||
|
||||
%install
|
||||
%meson_install
|
||||
mv %{buildroot}/%{_bindir}/ksh %{buildroot}/%{_bindir}/ksh93
|
||||
mv %{buildroot}/%{_bindir}/shcomp %{buildroot}/%{_bindir}/shcomp93
|
||||
mv %{buildroot}/%{_mandir}/man1/ksh.1 %{buildroot}/%{_mandir}/man1/ksh93.1
|
||||
mkdir -p %{buildroot}{%{_bindir},%{_mandir}/man1}
|
||||
install -p -m 755 arch/*/bin/ksh %{buildroot}%{_bindir}/ksh93
|
||||
install -p -m 755 arch/*/bin/shcomp %{buildroot}%{_bindir}/shcomp
|
||||
install -p -m 644 arch/*/man/man1/sh.1 %{buildroot}%{_mandir}/man1/ksh93.1
|
||||
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/binfmt.d/kshcomp.conf
|
||||
install -p -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/kshrc
|
||||
install -p -D -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/skel/.kshrc
|
||||
|
||||
touch %{buildroot}%{_bindir}/ksh
|
||||
touch %{buildroot}%{_mandir}/man1/ksh.1.gz
|
||||
|
||||
touch %{buildroot}%{_bindir}/rksh
|
||||
touch %{buildroot}%{_mandir}/man1/rksh.1.gz
|
||||
|
||||
%check
|
||||
%meson_test
|
||||
script -q -e -c "bin/package test"
|
||||
|
||||
%post
|
||||
for s in /bin/ksh /usr/bin/ksh
|
||||
for s in /bin/ksh /bin/rksh /usr/bin/ksh /usr/bin/rksh
|
||||
do
|
||||
if [ ! -f /etc/shells ]; then
|
||||
if [ ! -f /etc/shells ]; then
|
||||
echo "$s" > /etc/shells
|
||||
else
|
||||
else
|
||||
if ! grep -q '^'"$s"'$' /etc/shells ; then
|
||||
echo "$s" >> /etc/shells
|
||||
echo "$s" >> /etc/shells
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
/bin/systemctl try-restart systemd-binfmt.service >/dev/null 2>&1 || :
|
||||
|
||||
%{_sbindir}/alternatives --install /bin/ksh ksh /bin/ksh93 50 \
|
||||
--slave %{_mandir}/man1/ksh.1.gz ksh-man %{_mandir}/man1/ksh93.1.gz \
|
||||
--slave /bin/shcomp shcomp93 /bin/shcomp93 2>/dev/null
|
||||
%{_sbindir}/alternatives --install %{_bindir}/ksh ksh \
|
||||
%{_bindir}/ksh93 50 \
|
||||
--slave %{_bindir}/rksh rksh \
|
||||
%{_bindir}/ksh93 \
|
||||
--slave %{_mandir}/man1/rksh.1.gz rksh-man \
|
||||
%{_mandir}/man1/ksh93.1.gz \
|
||||
--slave %{_mandir}/man1/ksh.1.gz ksh-man \
|
||||
%{_mandir}/man1/ksh93.1.gz
|
||||
|
||||
if [ ! -L %{_bindir}/ksh ]; then
|
||||
%{_sbindir}/alternatives --auto ksh
|
||||
ln -sf /etc/alternatives/ksh %{_bindir}/ksh
|
||||
ln -sf /etc/alternatives/ksh-man %{_mandir}/man1/ksh.1.gz
|
||||
fi
|
||||
|
||||
%preun
|
||||
if [ $1 -eq 0 ]; then
|
||||
%{_sbindir}/alternatives --remove ksh /bin/ksh93
|
||||
if [ $1 = 0 ]; then
|
||||
%{_sbindir}/alternatives --remove ksh %{_bindir}/ksh93
|
||||
fi
|
||||
|
||||
%postun
|
||||
for s in /bin/ksh /usr/bin/ksh
|
||||
for s in /bin/ksh /bin/rksh /usr/bin/ksh /usr/bin/rksh
|
||||
do
|
||||
if [ ! -f $s ]; then
|
||||
sed -i '\|^'"$s"'$|d' /etc/shells
|
||||
fi
|
||||
if [ ! -f $s ]; then
|
||||
sed -i '\|^'"$s"'$|d' /etc/shells
|
||||
fi
|
||||
done
|
||||
|
||||
%triggerpostun -- ksh < 1:2020.0.0-0.1
|
||||
%{_sbindir}/alternatives --auto ksh
|
||||
|
||||
%files
|
||||
%doc src/cmd/ksh93/{COMPATIBILITY,RELEASE,TYPES}
|
||||
%{_bindir}/{ksh93,shcomp93}
|
||||
%{_mandir}/man1/*
|
||||
%files
|
||||
%doc src/cmd/ksh93/{COMPATIBILITY,RELEASE,TYPES,README}
|
||||
%doc README.md NEWS
|
||||
%license LICENSE.md
|
||||
%{_bindir}/ksh93
|
||||
%ghost %{_bindir}/ksh
|
||||
%ghost %{_bindir}/rksh
|
||||
%{_bindir}/shcomp
|
||||
%{_mandir}/man1/ksh93.1*
|
||||
%ghost %{_mandir}/man1/ksh.1*
|
||||
%ghost %{_mandir}/man1/rksh.1*
|
||||
%config(noreplace) %{_sysconfdir}/skel/.kshrc
|
||||
%config(noreplace) %{_sysconfdir}/kshrc
|
||||
%config(noreplace) %{_sysconfdir}/binfmt.d/kshcomp.conf
|
||||
|
||||
%changelog
|
||||
* Mon Feb 5 2024 wangyuhang <wangyuhang27@huawei.com> - 2:1.0.8-1
|
||||
- Type:bugfix
|
||||
- CVE:NA
|
||||
- SUG:NA
|
||||
- DESC:due to the upstream community no longer maintaining the previous version,
|
||||
we have rolled back to the stable branch and switched to an active code repository.
|
||||
new upstream release and update version to 1.0.8
|
||||
|
||||
* Tue Dec 6 2022 wangyuhang <wangyuhang27@huawei.com> - 1:2020.0.0-11
|
||||
- Type:bugfix
|
||||
- CVE:NA
|
||||
|
||||
@ -1,151 +1,33 @@
|
||||
From 97795806fda12850b896d2dde4442568f38d7c48 Mon Sep 17 00:00:00 2001
|
||||
From: wangjiang <wangjiang37@h-partners.com>
|
||||
Date: Fri, 11 Mar 2022 14:34:29 +0800
|
||||
From 882029ce930456be2b954fa8467be3e0494504da Mon Sep 17 00:00:00 2001
|
||||
From: wangyuhang <wangyuhang27@huawei.com>
|
||||
Date: Sun, 4 Feb 2024 16:53:58 +0800
|
||||
Subject: [PATCH] openEuler-skip-some-test
|
||||
|
||||
Offering:EulerOS Server
|
||||
CVE:
|
||||
Reference:
|
||||
Type:bugfix/CVE/requirement/cleancode/testcode
|
||||
DTS/AR:
|
||||
reason:
|
||||
---
|
||||
src/cmd/ksh93/tests/b_ulimit.sh | 4 ++--
|
||||
src/cmd/ksh93/tests/b_uname.sh | 6 +++---
|
||||
src/cmd/ksh93/tests/bracket.sh | 8 ++++----
|
||||
src/cmd/ksh93/tests/builtins.sh | 2 +-
|
||||
src/cmd/ksh93/tests/meson.build | 4 ----
|
||||
src/cmd/ksh93/tests/path.sh | 2 +-
|
||||
6 files changed, 11 insertions(+), 15 deletions(-)
|
||||
src/cmd/ksh93/tests/shtests | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/cmd/ksh93/tests/b_ulimit.sh b/src/cmd/ksh93/tests/b_ulimit.sh
|
||||
index 0250926..4c9dd0f 100644
|
||||
--- a/src/cmd/ksh93/tests/b_ulimit.sh
|
||||
+++ b/src/cmd/ksh93/tests/b_ulimit.sh
|
||||
@@ -66,7 +66,7 @@ actual=$(ulimit -t)
|
||||
|
||||
# ==========
|
||||
# -v The number of K-bytes for virtual memory.
|
||||
-if [[ $OS_NAME != openbsd ]]
|
||||
+if [[ $OS_NAME != linux ]]
|
||||
then
|
||||
ulimit -v unlimited
|
||||
expect=unlimited
|
||||
@@ -76,7 +76,7 @@ fi
|
||||
|
||||
# ==========
|
||||
# -M, --as The address space limit in Kibytes.
|
||||
-if [[ $OS_NAME != openbsd ]]
|
||||
+if [[ $OS_NAME != linux ]]
|
||||
then
|
||||
ulimit -M unlimited
|
||||
expect=unlimited
|
||||
diff --git a/src/cmd/ksh93/tests/b_uname.sh b/src/cmd/ksh93/tests/b_uname.sh
|
||||
index 4c9c06a..69ef430 100644
|
||||
--- a/src/cmd/ksh93/tests/b_uname.sh
|
||||
+++ b/src/cmd/ksh93/tests/b_uname.sh
|
||||
@@ -29,9 +29,9 @@ expect=$($bin_uname -n)
|
||||
# ==========
|
||||
# -r, --release|kernel-release
|
||||
# The kernel release level.
|
||||
-actual=$(uname -r)
|
||||
-expect=$($bin_uname -r)
|
||||
-[[ "$actual" = "$expect" ]] || log_error "'uname -r' failed" "$expect" "$actual"
|
||||
+#actual=$(uname -r)
|
||||
+#expect=$($bin_uname -r)
|
||||
+#[[ "$actual" = "$expect" ]] || log_error "'uname -r' failed" "$expect" "$actual"
|
||||
|
||||
# ==========
|
||||
# -v, --version|kernel-version
|
||||
diff --git a/src/cmd/ksh93/tests/bracket.sh b/src/cmd/ksh93/tests/bracket.sh
|
||||
index 07029f1..6915583 100644
|
||||
--- a/src/cmd/ksh93/tests/bracket.sh
|
||||
+++ b/src/cmd/ksh93/tests/bracket.sh
|
||||
@@ -99,7 +99,7 @@ then
|
||||
fi
|
||||
|
||||
chmod 000 $file
|
||||
-if [[ $OS_NAME == cygwin* ]]
|
||||
+if [[ $OS_NAME == linux ]]
|
||||
then
|
||||
log_info 'skipping [[ -r $file ]] test on Cygwin'
|
||||
else
|
||||
@@ -114,7 +114,7 @@ then
|
||||
log_error "-r: $file should be owned by me"
|
||||
fi
|
||||
|
||||
-if [[ $OS_NAME == cygwin* ]]
|
||||
+if [[ $OS_NAME == linux ]]
|
||||
then
|
||||
log_info 'skipping [[ -w $file ]] test on Cygwin'
|
||||
else
|
||||
@@ -124,7 +124,7 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
-if [[ $OS_NAME == cygwin* ]]
|
||||
+if [[ $OS_NAME == linux ]]
|
||||
then
|
||||
log_info 'skipping [[ -x $file ]] test on Cygwin'
|
||||
else
|
||||
@@ -134,7 +134,7 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
-if [[ $OS_NAME == cygwin* ]]
|
||||
+if [[ $OS_NAME == linux ]]
|
||||
then
|
||||
log_info 'skipping [[ -w $file || -r $file ]] test on Cygwin'
|
||||
else
|
||||
diff --git a/src/cmd/ksh93/tests/builtins.sh b/src/cmd/ksh93/tests/builtins.sh
|
||||
index 55b1f4f..8f9fbba 100644
|
||||
--- a/src/cmd/ksh93/tests/builtins.sh
|
||||
+++ b/src/cmd/ksh93/tests/builtins.sh
|
||||
@@ -551,7 +551,7 @@ print ". $TEST_DIR/evalbug" >$TEST_DIR/envfile
|
||||
[[ $(ENV=$TEST_DIR/envfile $SHELL -i -c : 2> /dev/null) == ok ]] || log_error 'eval inside dot script called from profile file not working'
|
||||
|
||||
# test cd to a directory that doesn't have execute permission
|
||||
-if [[ $OS_NAME == cygwin* ]]
|
||||
+if [[ $OS_NAME == linux ]]
|
||||
then
|
||||
log_warning 'skipping test of cd to dir without execute permission on Cygwin'
|
||||
else
|
||||
diff --git a/src/cmd/ksh93/tests/meson.build b/src/cmd/ksh93/tests/meson.build
|
||||
index 6a07d7c..7728b88 100644
|
||||
--- a/src/cmd/ksh93/tests/meson.build
|
||||
+++ b/src/cmd/ksh93/tests/meson.build
|
||||
@@ -9,7 +9,6 @@ all_tests = [
|
||||
['b_alias'],
|
||||
['b_basename'],
|
||||
['b_cat'],
|
||||
- ['b_chmod'],
|
||||
['b_cmp'],
|
||||
['b_command'],
|
||||
['b_cut'],
|
||||
@@ -34,7 +33,6 @@ all_tests = [
|
||||
['b_sleep'],
|
||||
['b_sync'],
|
||||
['b_test.exp'],
|
||||
- ['b_test'],
|
||||
['b_time.exp'],
|
||||
['b_times.exp'],
|
||||
['b_ulimit'],
|
||||
@@ -49,8 +47,6 @@ all_tests = [
|
||||
['arrays2'],
|
||||
['attributes'],
|
||||
['basic', 90],
|
||||
- ['bracket'],
|
||||
- ['builtins'],
|
||||
['case'],
|
||||
['comvar'],
|
||||
['comvario'],
|
||||
diff --git a/src/cmd/ksh93/tests/path.sh b/src/cmd/ksh93/tests/path.sh
|
||||
index 6920f19..4999d8f 100644
|
||||
--- a/src/cmd/ksh93/tests/path.sh
|
||||
+++ b/src/cmd/ksh93/tests/path.sh
|
||||
@@ -276,7 +276,7 @@ exp=126
|
||||
#
|
||||
# TODO: Figure out if there is some way to make ksh behave on Cygwin like it does on real UNIX/POSIX
|
||||
# compliant systems for these edge cases without greatly complicating the code.
|
||||
-if [[ $OS_NAME != cygwin* ]]
|
||||
+if [[ $OS_NAME != linux ]]
|
||||
then
|
||||
|
||||
: > $scr
|
||||
diff --git a/src/cmd/ksh93/tests/shtests b/src/cmd/ksh93/tests/shtests
|
||||
index 6bbe2ef..86cd3e8 100755
|
||||
--- a/src/cmd/ksh93/tests/shtests
|
||||
+++ b/src/cmd/ksh93/tests/shtests
|
||||
@@ -340,6 +340,10 @@ typeset -A tests
|
||||
typeset -i total_e=0
|
||||
for i in ${*-*.sh}
|
||||
do [[ $i == *.sh ]] || i+='.sh'
|
||||
+ if [[ $i == "pty.sh" ]]
|
||||
+ then
|
||||
+ continue
|
||||
+ fi
|
||||
if [[ ! -r $i ]]
|
||||
then echo $0: $i: not found >&2
|
||||
(( ++total_e ))
|
||||
--
|
||||
1.8.3.1
|
||||
2.33.0
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user