56 lines
1.9 KiB
Diff
56 lines
1.9 KiB
Diff
From 035a4cb3f453271b7ae63bcb53a7963b8dbe4c41 Mon Sep 17 00:00:00 2001
|
|
From: Anuradha Weeraman <anuradha@weeraman.com>
|
|
Date: Thu, 2 Jul 2020 18:29:07 -0400
|
|
Subject: [PATCH] Fix segfault if $PATH contains a .paths directory (#55)
|
|
|
|
ksh crashed if it encountered a .paths directory in any of the
|
|
directories in $PATH.
|
|
|
|
Ref: https://bugs.launchpad.net/ubuntu/+source/ksh/+bug/1534855
|
|
|
|
src/cmd/ksh93/sh/path.c: path_chkpaths():
|
|
- Refuse to read .paths if it's not a regular file
|
|
or a symlink to a regular file.
|
|
|
|
Upstream-commit: 035a4cb3f453271b7ae63bcb53a7963b8dbe4c41
|
|
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
|
|
---
|
|
src/cmd/ksh93/sh/path.c | 4 ++++
|
|
src/cmd/ksh93/tests/path.sh | 9 +++++++++
|
|
2 files changed, 13 insertions(+)
|
|
|
|
diff --git a/src/cmd/ksh93/sh/path.c b/src/cmd/ksh93/sh/path.c
|
|
index 213a2a6c7375..25ade4073dad 100644
|
|
--- a/src/cmd/ksh93/sh/path.c
|
|
+++ b/src/cmd/ksh93/sh/path.c
|
|
@@ -1507,6 +1507,10 @@ static int path_chkpaths(Shell_t *shp,Pathcomp_t *first, Pathcomp_t* old,Pathcom
|
|
if((fd=open(stakptr(offset),O_RDONLY))>=0)
|
|
{
|
|
fstat(fd,&statb);
|
|
+ if (!S_ISREG(statb.st_mode)) {
|
|
+ close(fd);
|
|
+ return 0;
|
|
+ }
|
|
n = statb.st_size;
|
|
stakseek(offset+pp->len+n+2);
|
|
sp = stakptr(offset+pp->len);
|
|
diff --git a/src/cmd/ksh93/tests/path.sh b/src/cmd/ksh93/tests/path.sh
|
|
index c9d8d2485e28..9725c74e31ea 100755
|
|
--- a/src/cmd/ksh93/tests/path.sh
|
|
+++ b/src/cmd/ksh93/tests/path.sh
|
|
@@ -408,5 +408,14 @@ END
|
|
END
|
|
) || err_exit '${.sh.xxx} variables causes cat not be found'
|
|
|
|
+# ksh segfaults if $PATH contains a .paths directory
|
|
+mkdir -p $tmp/paths-dir-crash/
|
|
+cat > $tmp/paths-dir-crash/run.sh <<- EOF
|
|
+mkdir -p $tmp/paths-dir-crash/.paths
|
|
+export PATH=$tmp/paths-dir-crash:$PATH
|
|
+print ok
|
|
+EOF
|
|
+[[ $($SHELL $tmp/paths-dir-crash/run.sh 2>/dev/null) == ok ]] || err_exit "ksh crashes if PATH contains a .paths directory"
|
|
+
|
|
exit $((Errors<125?Errors:125))
|
|
|