Compare commits

..

No commits in common. "c8" and "c9s" have entirely different histories.
c8 ... c9s

25 changed files with 125 additions and 1374 deletions

14
.gitignore vendored
View File

@ -1 +1,13 @@
SOURCES/tcsh-6.20.00.tar.gz tcsh-6.14.00.tar.gz
tcsh-6.15.00.tar.gz
tcsh-6.16.00.tar.gz
tcsh-6.17.00.tar.gz
/tcsh-6.18.00.tar.gz
/tcsh-6.18.01.tar.gz
/tcsh-6.19.00.tar.gz
/tcsh-6.20.00.tar.gz
/tcsh-6.21.00.tar.gz
/tcsh-TCSH6_22_00.tar.gz
/tcsh-6.22.00.tar.gz
/tcsh-6.22.02.tar.gz
/tcsh-6.22.03.tar.gz

View File

@ -1 +0,0 @@
a77d68434cc4bed731a46a39b9e01523e3a1e98c SOURCES/tcsh-6.20.00.tar.gz

View File

@ -1,25 +0,0 @@
From 8235759d3096654ff2f5c7118bd23f40b7dcbc8f Mon Sep 17 00:00:00 2001
From: christos <christos>
Date: Sat, 26 Nov 2016 00:14:18 +0000
Subject: [PATCH] Add all flags for the gethost build.
---
Makefile.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.in b/Makefile.in
index 1ef8cb7..5c30451 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -449,7 +449,7 @@ pure:$(P) ${OBJS}
gethost: gethost.c sh.err.h tc.const.h sh.h
rm -f gethost
- ${CC_FOR_GETHOST} -o gethost ${CPPFLAGS} $(srcdir)/gethost.c
+ ${CC_FOR_GETHOST} -o gethost ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} $(srcdir)/gethost.c
tc.defs.c: gethost host.defs
@rm -f $@.tmp
--
2.7.4

View File

@ -1,137 +0,0 @@
diff --git a/Fixes b/Fixes
--- a/Fixes
+++ b/Fixes
@@ -2,7 +2,6 @@
4. Don't play pointer tricks that are undefined in modern c (Brooks Davis)
3. Fix out of bounds read (Brooks Davis)
2. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
- 1. PR/471: Delay arginp parsing
20. V6.20.00 - 20161124
19. Don't resize the screen if it did not change size.
diff --git a/sh.c b/sh.c
--- a/sh.c
+++ b/sh.c
@@ -249,7 +249,6 @@ main(int argc, char **argv)
char *tcp, *ttyn;
int f, reenter;
char **tempv;
- const char *targinp = NULL;
int osetintr;
struct sigaction oparintr;
@@ -941,7 +940,30 @@ main(int argc, char **argv)
*p &= ASCII;
}
#endif
- targinp = tempv[0];
+ arginp = SAVE(tempv[0]);
+
+ /*
+ * we put the command into a variable
+ */
+ if (arginp != NULL)
+ setv(STRcommand, quote(Strsave(arginp)), VAR_READWRITE);
+
+ /*
+ * * Give an error on -c arguments that end in * backslash to
+ * ensure that you don't make * nonportable csh scripts.
+ */
+ {
+ int count;
+
+ cp = Strend(arginp);
+ count = 0;
+ while (cp > arginp && *--cp == '\\')
+ ++count;
+ if ((count & 1) != 0) {
+ exiterr = 1;
+ stderror(ERR_ARGC);
+ }
+ }
prompt = 0;
nofile = 1;
break;
@@ -1186,7 +1208,7 @@ main(int argc, char **argv)
sigset_interrupting(SIGXFSZ, queue_phup);
#endif
- if (quitit == 0 && targinp == 0) {
+ if (quitit == 0 && arginp == 0) {
#ifdef SIGTSTP
(void) signal(SIGTSTP, SIG_IGN);
#endif
@@ -1304,7 +1326,7 @@ main(int argc, char **argv)
*/
sigset_interrupting(SIGCHLD, queue_pchild);
- if (intty && !targinp)
+ if (intty && !arginp)
(void) ed_Setup(editing);/* Get the tty state, and set defaults */
/* Only alter the tty state if editing */
@@ -1339,7 +1361,7 @@ main(int argc, char **argv)
#ifdef _PATH_DOTCSHRC
(void) srcfile(_PATH_DOTCSHRC, 0, 0, NULL);
#endif
- if (!targinp && !onelflg && !havhash)
+ if (!arginp && !onelflg && !havhash)
dohash(NULL,NULL);
#ifndef LOGINFIRST
#ifdef _PATH_DOTLOGIN
@@ -1359,7 +1381,7 @@ main(int argc, char **argv)
if (!srccat(varval(STRhome), STRsldottcshrc))
(void) srccat(varval(STRhome), STRsldotcshrc);
- if (!targinp && !onelflg && !havhash)
+ if (!arginp && !onelflg && !havhash)
dohash(NULL,NULL);
/*
@@ -1379,7 +1401,7 @@ main(int argc, char **argv)
exitset--;
/* Initing AFTER .cshrc is the Right Way */
- if (intty && !targinp) { /* PWP setup stuff */
+ if (intty && !arginp) { /* PWP setup stuff */
ed_Init(); /* init the new line editor */
#ifdef SIG_WINDOW
check_window_size(1); /* mung environment */
@@ -1395,37 +1417,6 @@ main(int argc, char **argv)
setNS(STRecho);
- if (targinp) {
- /* If this -c command caused an error before, skip processing */
- if (reenter && arginp) {
- exitcode = 1;
- goto done;
- }
-
- arginp = SAVE(targinp);
- /*
- * we put the command into a variable
- */
- if (arginp != NULL)
- setv(STRcommand, quote(Strsave(arginp)), VAR_READWRITE);
-
- /*
- * * Give an error on -c arguments that end in * backslash to
- * ensure that you don't make * nonportable csh scripts.
- */
- {
- int count;
-
- cp = Strend(arginp);
- count = 0;
- while (cp > arginp && *--cp == '\\')
- ++count;
- if ((count & 1) != 0) {
- exiterr = 1;
- stderror(ERR_ARGC);
- }
- }
- }
/*
* All the rest of the world is inside this call. The argument to process
* indicates whether it should catch "error unwinds". Thus if we are a

View File

@ -1,157 +0,0 @@
From b27c203ff06a33b9fa6c0f2e14a8825eb3f672da Mon Sep 17 00:00:00 2001
From: christos <christos>
Date: Sun, 27 Nov 2016 16:40:58 +0000
Subject: [PATCH 1/2] PR/471: Daiki Ueno: Delay interpreting arginp until we've
processed our startup files (which can change the NLS environment).
---
sh.c | 62 +++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/sh.c b/sh.c
index 3b7db65..c73d42d 100644
--- a/sh.c
+++ b/sh.c
@@ -248,6 +248,7 @@ main(int argc, char **argv)
char *tcp, *ttyn;
int f, reenter;
char **tempv;
+ const char *targinp = NULL;
int osetintr;
struct sigaction oparintr;
@@ -937,30 +938,7 @@ main(int argc, char **argv)
*p &= ASCII;
}
#endif
- arginp = SAVE(tempv[0]);
-
- /*
- * we put the command into a variable
- */
- if (arginp != NULL)
- setv(STRcommand, quote(Strsave(arginp)), VAR_READWRITE);
-
- /*
- * * Give an error on -c arguments that end in * backslash to
- * ensure that you don't make * nonportable csh scripts.
- */
- {
- int count;
-
- cp = Strend(arginp);
- count = 0;
- while (cp > arginp && *--cp == '\\')
- ++count;
- if ((count & 1) != 0) {
- exiterr = 1;
- stderror(ERR_ARGC);
- }
- }
+ targinp = tempv[0];
prompt = 0;
nofile = 1;
break;
@@ -1205,7 +1183,7 @@ main(int argc, char **argv)
sigset_interrupting(SIGXFSZ, queue_phup);
#endif
- if (quitit == 0 && arginp == 0) {
+ if (quitit == 0 && targinp == 0) {
#ifdef SIGTSTP
(void) signal(SIGTSTP, SIG_IGN);
#endif
@@ -1323,7 +1301,7 @@ main(int argc, char **argv)
*/
sigset_interrupting(SIGCHLD, queue_pchild);
- if (intty && !arginp)
+ if (intty && !targinp)
(void) ed_Setup(editing);/* Get the tty state, and set defaults */
/* Only alter the tty state if editing */
@@ -1358,7 +1336,7 @@ main(int argc, char **argv)
#ifdef _PATH_DOTCSHRC
(void) srcfile(_PATH_DOTCSHRC, 0, 0, NULL);
#endif
- if (!arginp && !onelflg && !havhash)
+ if (!targinp && !onelflg && !havhash)
dohash(NULL,NULL);
#ifndef LOGINFIRST
#ifdef _PATH_DOTLOGIN
@@ -1378,7 +1356,7 @@ main(int argc, char **argv)
if (!srccat(varval(STRhome), STRsldottcshrc))
(void) srccat(varval(STRhome), STRsldotcshrc);
- if (!arginp && !onelflg && !havhash)
+ if (!targinp && !onelflg && !havhash)
dohash(NULL,NULL);
/*
@@ -1398,7 +1376,7 @@ main(int argc, char **argv)
exitset--;
/* Initing AFTER .cshrc is the Right Way */
- if (intty && !arginp) { /* PWP setup stuff */
+ if (intty && !targinp) { /* PWP setup stuff */
ed_Init(); /* init the new line editor */
#ifdef SIG_WINDOW
check_window_size(1); /* mung environment */
@@ -1413,6 +1391,32 @@ main(int argc, char **argv)
if (nexececho)
setNS(STRecho);
+
+ if (targinp) {
+ arginp = SAVE(targinp);
+ /*
+ * we put the command into a variable
+ */
+ if (arginp != NULL)
+ setv(STRcommand, quote(Strsave(arginp)), VAR_READWRITE);
+
+ /*
+ * * Give an error on -c arguments that end in * backslash to
+ * ensure that you don't make * nonportable csh scripts.
+ */
+ {
+ int count;
+
+ cp = Strend(arginp);
+ count = 0;
+ while (cp > arginp && *--cp == '\\')
+ ++count;
+ if ((count & 1) != 0) {
+ exiterr = 1;
+ stderror(ERR_ARGC);
+ }
+ }
+ }
/*
* All the rest of the world is inside this call. The argument to process
* indicates whether it should catch "error unwinds". Thus if we are a
--
2.7.4
From 517fdacc6e194acfa56aecdb5bbf4cf7b129fbc2 Mon Sep 17 00:00:00 2001
From: christos <christos>
Date: Sun, 27 Nov 2016 16:41:24 +0000
Subject: [PATCH 2/2] mention latest fix
---
Fixes | 1 +
1 file changed, 1 insertion(+)
diff --git a/Fixes b/Fixes
index 7440349..c79dc38 100644
--- a/Fixes
+++ b/Fixes
@@ -1,3 +1,4 @@
+ 21. PR/471: Delay arginp parsing
20. V6.20.00 - 20161124
19. Don't resize the screen if it did not change size.
18. V6.19.01 - 20161025
--
2.7.4

View File

@ -1,49 +0,0 @@
From 75ccc1197d63d015348b9113ed8d9f7abace567e Mon Sep 17 00:00:00 2001
From: christos <christos>
Date: Mon, 28 Nov 2016 17:14:20 +0000
Subject: [PATCH] Fix type of read in prompt confirmation (eg. rmstar) (David
Kaspar)
---
Fixes | 1 +
sh.func.c | 8 +++++---
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/Fixes b/Fixes
index c79dc38..1c2e183 100644
--- a/Fixes
+++ b/Fixes
@@ -1,3 +1,4 @@
+ 22. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
21. PR/471: Delay arginp parsing
20. V6.20.00 - 20161124
19. Don't resize the screen if it did not change size.
diff --git a/sh.func.c b/sh.func.c
index a866076..2118399 100644
--- a/sh.func.c
+++ b/sh.func.c
@@ -2734,16 +2734,18 @@ nlsclose(void)
int
getYN(const char *prompt)
{
- int doit, c;
+ int doit;
+ char c;
+
xprintf("%s", prompt);
flush();
- (void) force_read(SHIN, &c, 1);
+ (void) force_read(SHIN, &c, sizeof(c));
/*
* Perhaps we should use the yesexpr from the
* actual locale
*/
doit = (strchr(CGETS(22, 14, "Yy"), c) != NULL);
- while (c != '\n' && force_read(SHIN, &c, 1) == 1)
+ while (c != '\n' && force_read(SHIN, &c, sizeof(c)) == sizeof(c))
continue;
return doit;
}
--
2.7.4

View File

@ -1,26 +0,0 @@
From 6a542dc4fb2ba26518a47e9b3a9bcd6a91b94596 Mon Sep 17 00:00:00 2001
From: christos <christos>
Date: Fri, 2 Dec 2016 16:59:28 +0000
Subject: [PATCH] Fix out of bounds read (Brooks Davis) (reproduce by starting
tcsh and hitting tab at the prompt)
---
ed.chared.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ed.chared.c b/ed.chared.c
index 1277e53..310393e 100644
--- a/ed.chared.c
+++ b/ed.chared.c
@@ -750,7 +750,7 @@ c_substitute(void)
/*
* If we found a history character, go expand it.
*/
- if (HIST != '\0' && *p == HIST)
+ if (p >= InputBuf && HIST != '\0' && *p == HIST)
nr_exp = c_excl(p);
else
nr_exp = 0;
--
2.7.4

View File

@ -1,28 +0,0 @@
From 2309245d647853442f6a5450130f56499698176e Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos@zoulas.com>
Date: Wed, 7 Dec 2016 02:52:27 +0000
Subject: [PATCH] Don't play pointer tricks that are undefined in modern c
(Brooks Davis)
---
tw.init.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tw.init.c b/tw.init.c
index 68adbb9..d9525c5 100644
--- a/tw.init.c
+++ b/tw.init.c
@@ -125,9 +125,8 @@ tw_str_add(stringlist_t *sl, size_t len)
sl->buff = xrealloc(sl->buff, sl->tbuff * sizeof(Char));
/* Re-thread the new pointer list, if changed */
if (ptr != NULL && ptr != sl->buff) {
- intptr_t offs = sl->buff - ptr;
for (i = 0; i < sl->nlist; i++)
- sl->list[i] += offs;
+ sl->list[i] = sl->buff + (sl->list[i] - ptr);
}
disabled_cleanup(&pintr_disabled);
}
--
2.9.3

View File

@ -1,69 +0,0 @@
From 8016b940223e73ec5ba031c4c8451e57efa9d37b Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Sat, 24 Dec 2016 10:22:22 +0000
Subject: [PATCH 1/3] Reset numbering since 6.20.00
---
Fixes | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Fixes b/Fixes
index 1c2e183..ef39e42 100644
--- a/Fixes
+++ b/Fixes
@@ -1,5 +1,6 @@
- 22. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
- 21. PR/471: Delay arginp parsing
+ 2. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
+ 1. PR/471: Delay arginp parsing
+
20. V6.20.00 - 20161124
19. Don't resize the screen if it did not change size.
18. V6.19.01 - 20161025
--
2.9.3
From 4ee184c298368e8a7f2954197f3f279a70dd10aa Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Sat, 24 Dec 2016 12:39:23 +0000
Subject: [PATCH 2/3] Note a missing fix.
---
Fixes | 1 +
1 file changed, 1 insertion(+)
diff --git a/Fixes b/Fixes
index ef39e42..c99ffa3 100644
--- a/Fixes
+++ b/Fixes
@@ -1,3 +1,4 @@
+ 3. Fix out of bounds read (Brooks Davis)
2. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
1. PR/471: Delay arginp parsing
--
2.9.3
From 4f3088e31cc72c314ecb803fac0405dac5047179 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Sat, 24 Dec 2016 13:15:47 +0000
Subject: [PATCH 3/3] Note another missing fix.
---
Fixes | 1 +
1 file changed, 1 insertion(+)
diff --git a/Fixes b/Fixes
index c99ffa3..aec768e 100644
--- a/Fixes
+++ b/Fixes
@@ -1,3 +1,4 @@
+ 4. Don't play pointer tricks that are undefined in modern c (Brooks Davis)
3. Fix out of bounds read (Brooks Davis)
2. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
1. PR/471: Delay arginp parsing
--
2.9.3

View File

@ -1,480 +0,0 @@
From f605e04aec4ff608c045a40ae8df1bb6bae21aa5 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Wed, 1 Feb 2017 14:26:16 +0200
Subject: [PATCH 1/5] Cleanup README files
Rename README to BUILDING and fold in README.imake so
all build instructions are now in a single file.
Add README.md for a short intro on GitHub.
---
README => BUILDING | 115 +++++++++++++++++++++++++++--------------------------
Imakefile | 11 +++--
Makefile.in | 6 +--
Makefile.std | 6 +--
Makefile.vms | 6 +--
Ported | 2 +-
README.imake | 9 -----
README.md | 17 ++++++++
8 files changed, 90 insertions(+), 82 deletions(-)
rename README => BUILDING (68%)
delete mode 100644 README.imake
create mode 100644 README.md
diff --git a/README b/BUILDING
similarity index 68%
rename from README
rename to BUILDING
index 77693cd..f19f849 100644
--- a/README
+++ b/BUILDING
@@ -1,32 +1,44 @@
-This is tcsh version 6.20.00. Tcsh is a version of the Berkeley
-C-Shell, with the addition of: a command line editor, command and file
-name completion, listing, etc. and a bunch of small additions to the
+Tcsh is an enhanced but completely compatible version of the Berkeley
+C-Shell, with the addition of a command line editor, command and file
+name completion, listing, etc., and a bunch of small additions to the
shell itself.
Tcsh has been ported to most unix variants, and can be tinkered to work
in unix systems that it has not ported yet. See the Ported file for
a more complete list of ported systems and in the config directory for
a configuration file that matches your system.
+
Tcsh also runs under VMS/POSIX and OS/2+emx; the OS/2 port is not
complete yet.
-Feel free to use it. These changes to csh may only be included in a
-commercial product if the inclusion or exclusion does not change the
+Feel free to use it. These changes to csh may only be included in
+a commercial product if the inclusion or exclusion does not change the
purchase price, level of support, etc. Please respect the individual
authors by giving credit where credit is due (in other words, don't
claim that you wrote portions that you haven't, and don't delete the
-names of the authors from the source code or documentation).
+names of the authors from the source code or documentation).
To install tcsh:
-0) Try running "./configure". If that doesn't work, goto step 1.
+1) Try running "./configure". If that doesn't work, goto step 2.
Run "./configure --help" to see possible options. After running
- configure, goto step 3.
+ configure, goto step 5.
+
+2) If you have imake running on your machine, you may try building with
+ it. Note that imake is not supported for all the platforms yet, so
+ this might not work on your machine. If that is the case please let
+ us know, and goto step 3. If you can send a patch that fixes the
+ problem we would appreciate it.
+
+ a) Modify configurable parameters in imake.config to your liking.
+ b) xmkmf; make depend
-1) Otherwise copy Makefile.std to Makefile. Look at the Makefile and
+ Goto step 5.
+
+3) Otherwise copy Makefile.std to Makefile. Look at the Makefile and
make sure that you are using the right compilation flags.
-2) Copy the appropriate for your machine and OS config file from the
+4) Copy the appropriate for your machine and OS config file from the
config subdirectory into config.h. Consult the file "Ported" for
settings known to work on various machines. If you are trying to
compile tcsh on a machine for which there is no config file yet,
@@ -34,35 +46,36 @@ To install tcsh:
the supplied ones. If you get tcsh working on a new machine, I'd
appreciate a copy of the config file plus additional information
about the architecture/OS. If you are creating a new config file,
- look very hard at BSDJOBS and BSDTIMES if you are running
- a non-BSD machine. For vanila SysV, these would all be #undef-ed,
- but others may vary (such as A/UX or HPUX). On a pyramid, compile
- in the UCB universe even if you are running under the ATT universe
- usually; it will work anyway, and you get job control for free.
+ look very hard at BSDJOBS and BSDTIMES if you are running a non-BSD
+ machine. For vanila SysV, these would all be #undef-ed, but others
+ may vary (such as A/UX or HPUX). On a pyramid, compile in the UCB
+ universe even if you are running under the ATT universe usually; it
+ will work anyway, and you get job control for free.
-3) Look at config_f.h, and enable or disable any features you want.
+5) Look at config_f.h, and enable or disable any features you want.
It is configured the way I like it, but you may disagree.
-4) Look at host.defs to make sure that you have the right defines to set
- the environment variables "HOSTTYPE", "MACHTYPE", "OSTYPE" and
- "VENDOR" correctly. If you need to make changes, PLEASE SEND THEM
+6) Look at host.defs to make sure that you have the right defines to
+ set the environment variables "HOSTTYPE", "MACHTYPE", "OSTYPE" and
+ "VENDOR" correctly. If you need to make changes, PLEASE SEND THEM
BACK TO ME.
-5) You may want to adjust the DESTBIN and DESTMAN entries in
- the Makefile. These are the directories that tcsh, and the tcsh.1
- man entry will be placed in when you do a "make install" and "make
- install.man" respectively. If you decide to install tcsh somewhere
- other than in /usr/local/bin/tcsh, you should #define _PATH_TCSHELL
+7) You may want to adjust the DESTBIN and DESTMAN entries in Makefile.
+ These are the directories that tcsh, and the tcsh.1 man entry will
+ be placed in when you do a "make install" and "make install.man"
+ respectively. If you decide to install tcsh somewhere other
+ than in /usr/local/bin/tcsh, you should #define _PATH_TCSHELL
"/your/installation/directory/tcsh" in pathnames.h.
-6) make
+8) make
-7) Read the documentation while you are waiting. The file tcsh.man
+9) Read the documentation while you are waiting. The file tcsh.man
is in standard [nt]roff -man format. If you like, you can run the
- tcsh.man2html script (requires Perl) to generate an HTML version of
- the manpage which you can read with Mosaic, lynx or other HTML browser.
+ tcsh.man2html script (requires Perl) to generate an HTML version
+ of the manpage which you can read with Mosaic, lynx or other HTML
+ browser.
-8) Test tcsh by typing ./tcsh to see that it has compiled correctly.
+10) Test tcsh by typing ./tcsh to see that it has compiled correctly.
The history command should give a time stamp on every entry.
Typing normal characters should echo each exactly once. Control-A
should put the cursor at the beginning of the input line, but after
@@ -80,29 +93,19 @@ To install tcsh:
passwd appears on the screen, you have lost /dev/tty. Otherwise
everything is fine.
-9) Once satisfied that tcsh is working correctly, complete the installation
- by typing "make install" to install the binary, and "make install.man" to
- install the documentation. Don't forget to look at complete.tcsh for
- useful completions...
-
-10) Enjoy.
-
-11) PLEASE file any bug reports (and fixes), code for new features at:
+11) Once satisfied that tcsh is working correctly, complete the
+ installation by typing "make install" to install the binary, and
+ "make install.man" to install the documentation. Don't forget to
+ look at complete.tcsh for useful completions...
- http://bugs.gw.com/
-
- Comments, questions, etc. (even flames) are welcome via email to:
-
- The tcsh bugs mailing list
- tcsh-bugs@mx.gw.com
-
-Various:
+12) Enjoy.
***************************************************************************
-On sysv versions < 3.0 (not hpux) Doug Gwyn's public domain directory
+On sysv versions < 3.0 (not hpux) Doug Gwyn's public domain directory
manipulation library has to be installed. This library is available
for anonymous ftp from prep.ai.mit.edu:/pub/gnu/dirent.tar.Z
+
If the network is not installed, then there is a gethostname()
routine is tc.os.c
@@ -130,24 +133,23 @@ error message to that effect. If you don't like the message:
Or: Comment the error printing out in tc.alloc.c
Or: Compile -DSYSMALLOC
-
***************************************************************************
From: Scott Krotz <krotz@honey.rtsg.mot.com>
-Tcsh has been ported to minix by Scott Krotz (krotz@honey.rtsg.mot.com).
+Tcsh has been ported to minix by Scott Krotz (krotz@honey.rtsg.mot.com).
Unfortunately the minix sed is broken, so you'll have to find a way to
make tc.const.h, sh.err.h, ed.defns.h which are automatically generated.
-The easiest way to create them is to make a copy from unix, copying
+The easiest way to create them is to make a copy from unix, copying
minix to config.h, and then 'make sh.err.h tc.const.h ed.defns.h'
The OS/dependent files are in mi.termios.h, mi.wait.h, mi.varargs.h
-You will get some warnings, but dont worry about them, just ignore
-them. After tcsh has compiled and the gcc binary is converted to a
-minix binary, remember to chmem it to give it more memory - it will
-need it! How much you need depends on how many aliases you have, etc..
-Add at least 50000 to it.
+You will get some warnings, but dont worry about them, just ignore them.
+After tcsh has compiled and the gcc binary is converted to a minix
+binary, remember to chmem it to give it more memory - it will need it!
+How much you need depends on how many aliases you have, etc.. Add at
+least 50000 to it.
One last thing. You might have to make some links for include files so
that they are in the directories that tcsh is expecting while compiling.
@@ -193,12 +195,11 @@ I can make the binary available to anyone who wants it (for example people
who can't get access to a cross-compiling environment, and who don't yet
have gcc running under minix).
-
***************************************************************************
-If your compiler cannot handle long symbol names, add
+If your compiler cannot handle long symbol names, add
-#include "snames.h"
+#include "snames.h"
to your config.h file
diff --git a/Imakefile b/Imakefile
index 5dc0db7..be2bebe 100644
--- a/Imakefile
+++ b/Imakefile
@@ -520,12 +520,11 @@ TCOBJS= tc.alloc.${SUF} tc.bind.${SUF} tc.const.${SUF} tc.defs.${SUF} \
tc.prompt.${SUF} tc.sched.${SUF} tc.sig.${SUF} tc.str.${SUF} \
tc.vers.${SUF} tc.who.${SUF}
-MISCF = Makefile.std Fixes MAKEDIFFS MAKESHAR NewThings README FAQ \
- WishList config_f.h eight-bit.me glob.3 patchlevel.h \
- pathnames.h tcsh.man Ported src.desc Imakefile imake.config \
- README.imake complete.tcsh vmsreadme.txt Makefile.vms termcap.vms \
- snames.h host.defs gethost.c tcsh.man2html Makefile.in configure.ac \
- Makefile.win32 aclocal.m4
+MISCF = Makefile.std BUILDING Fixes MAKEDIFFS MAKESHAR NewThings README.md \
+ FAQ WishList config_f.h eight-bit.me glob.3 patchlevel.h pathnames.h \
+ tcsh.man Ported src.desc Imakefile imake.config complete.tcsh \
+ Makefile.vms termcap.vms snames.h host.defs gethost.c tcsh.man2html \
+ Makefile.in configure.ac Makefile.win32 aclocal.m4
CONFSRCS=config/[a-z]*
diff --git a/Makefile.in b/Makefile.in
index caf8d9c..210b7de 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -405,11 +405,11 @@ TCOBJS= tc.alloc.${SUF} tc.bind.${SUF} tc.const.${SUF} tc.defs.${SUF} \
tc.vers.${SUF} tc.who.${SUF}
PVSRCS= Makefile.std Makefile.vms Makefile.in Makefile.win32
-AVSRCS= Fixes MAKEDIFFS MAKESHAR NewThings README FAQ \
+AVSRCS= BUILDING Fixes MAKEDIFFS MAKESHAR NewThings README.md FAQ \
WishList config_f.h eight-bit.me glob.3 patchlevel.h \
pathnames.h tcsh.man Ported src.desc Imakefile imake.config \
- README.imake complete.tcsh vmsreadme.txt termcap.vms snames.h \
- host.defs gethost.c tcsh.man2html configure.ac configure config.h.in \
+ complete.tcsh vmsreadme.txt termcap.vms snames.h host.defs \
+ gethost.c tcsh.man2html configure.ac configure config.h.in \
tests/testsuite.at aclocal.m4
TESTFILES= tests/aliases.at tests/arguments.at tests/commands.at \
tests/expr.at tests/lexical.at tests/mb-eucjp.at \
diff --git a/Makefile.std b/Makefile.std
index ffd33b1..3466d4c 100644
--- a/Makefile.std
+++ b/Makefile.std
@@ -315,11 +315,11 @@ TCOBJS= tc.alloc.${SUF} tc.bind.${SUF} tc.const.${SUF} tc.defs.${SUF} \
tc.vers.${SUF} tc.who.${SUF}
PVSRCS= Makefile.std Makefile.vms Makefile.in Makefile.win32
-AVSRCS= Fixes MAKEDIFFS MAKESHAR NewThings README FAQ \
+AVSRCS= BUILDING Fixes MAKEDIFFS MAKESHAR NewThings README.md FAQ \
WishList config_f.h eight-bit.me glob.3 patchlevel.h \
pathnames.h tcsh.man Ported src.desc Imakefile imake.config \
- README.imake complete.tcsh vmsreadme.txt termcap.vms snames.h \
- host.defs gethost.c tcsh.man2html configure.ac configure config.h.in \
+ complete.tcsh vmsreadme.txt termcap.vms snames.h host.defs \
+ gethost.c tcsh.man2html configure.ac configure config.h.in \
aclocal.m4
VHSRCS=${PVSRCS} ${AVSRCS}
diff --git a/Makefile.vms b/Makefile.vms
index d47f9ce..bc24114 100644
--- a/Makefile.vms
+++ b/Makefile.vms
@@ -293,11 +293,11 @@ TCOBJS= tc.alloc.${SUF} tc.bind.${SUF} tc.const.${SUF} tc.defs.${SUF} \
tc.vers.${SUF} tc.who.${SUF}
PVSRCS= Makefile.std Makefile.vms Makefile.in Makefile.win32
-AVSRCS= Fixes MAKEDIFFS MAKESHAR NewThings README FAQ \
+AVSRCS= BUILDING Fixes MAKEDIFFS MAKESHAR NewThings README.md FAQ \
WishList config_f.h eight-bit.me glob.3 patchlevel.h \
pathnames.h tcsh.man Ported src.desc Imakefile imake.config \
- README.imake complete.tcsh vmsreadme.txt termcap.vms snames.h \
- host.defs gethost.c tcsh.man2html configure.ac aclocal.m4
+ complete.tcsh vmsreadme.txt termcap.vms snames.h host.defs \
+ gethost.c tcsh.man2html configure.ac aclocal.m4
VHSRCS=${PVSRCS} ${AVSRCS}
diff --git a/Ported b/Ported
index ca1ac3b..f1151c7 100644
--- a/Ported
+++ b/Ported
@@ -338,7 +338,7 @@ CFLAGS : normal
LIBES : -ltermcap
OS : bsd 4.3reno
CONFIG : bsdreno
-NOTES : ttyname() is buggy. calls closedir() twice. See README
+NOTES : ttyname() is buggy. calls closedir() twice. See BUILDING
ENVIRON : n/a
VERSION : 6.00.04
diff --git a/README.imake b/README.imake
deleted file mode 100644
index dfe2e2f..0000000
--- a/README.imake
+++ /dev/null
@@ -1,9 +0,0 @@
-
-If you have imake running on your machine, you may skip steps 1 and 2
-described in the README file and try instead the process described here.
-Note that imake is not supported for all the platforms yet, so this
-might not work on your machine. If that is the case please let us know.
-If you can send a patch that fixes the problem we would appreciate it.
-
-1. edit imake.config and modify the configurable parameters to your liking.
-2. 'xmkmf; make depend; make'
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..43a92bb
--- /dev/null
+++ b/README.md
@@ -0,0 +1,17 @@
+# Tcsh - C shell with file name completion and command line editing
+
+The Tcsh source code is available on GitHub as a read-only mirror at:
+
+ http://github.com/tcsh-org/tcsh
+
+Instructions for compiling Tcsh can be found in [BUILDING].
+
+PLEASE file any bug reports (and fixes), code for new features at:
+
+ http://bugs.gw.com/
+
+Comments, questions, etc. (even flames) are welcome via email to
+the Tcsh Bugs mailing list:
+
+ tcsh-bugs@mx.gw.com
+
--
2.9.3
From 709e97df63dab42dc7cc474f54b621f732228b25 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Wed, 1 Feb 2017 15:45:10 +0200
Subject: [PATCH 2/5] Improve formatting
---
README.md | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 43a92bb..fcbdbfc 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,21 @@
-# Tcsh - C shell with file name completion and command line editing
+# Tcsh
-The Tcsh source code is available on GitHub as a read-only mirror at:
+*C shell with file name completion and command line editing*
- http://github.com/tcsh-org/tcsh
+The Tcsh source code is available on GitHub as a read-only repo
+mirror at:
-Instructions for compiling Tcsh can be found in [BUILDING].
+> http://github.com/tcsh-org/tcsh
-PLEASE file any bug reports (and fixes), code for new features at:
+Instructions for compiling Tcsh can be found in
+[BUILDING](blob/master/BUILDING).
- http://bugs.gw.com/
+PLEASE file any bug reports, fixes, and code for new features at:
+
+> http://bugs.gw.com/
Comments, questions, etc. (even flames) are welcome via email to
the Tcsh Bugs mailing list:
- tcsh-bugs@mx.gw.com
+> tcsh-bugs@mx.gw.com
--
2.9.3
From e784b20c10a214a944953c25601918c7ab0c1f69 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Wed, 1 Feb 2017 16:01:43 +0200
Subject: [PATCH 3/5] Add build status
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index fcbdbfc..6ff9b7a 100644
--- a/README.md
+++ b/README.md
@@ -19,3 +19,4 @@ the Tcsh Bugs mailing list:
> tcsh-bugs@mx.gw.com
+[![Build Status](https://travis-ci.org/tcsh-org/tcsh.svg?branch=master)](https://travis-ci.org/tcsh-org/tcsh)
--
2.9.3
From 1f2066458f442cc956138c24c79110f36a30cf0d Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Wed, 1 Feb 2017 16:34:17 +0200
Subject: [PATCH 4/5] Learning curve
---
README.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 6ff9b7a..466c22b 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,7 @@ mirror at:
> http://github.com/tcsh-org/tcsh
-Instructions for compiling Tcsh can be found in
-[BUILDING](blob/master/BUILDING).
+Instructions for compiling Tcsh can be found in [BUILDING].
PLEASE file any bug reports, fixes, and code for new features at:
--
2.9.3
From 19a63ad9f28fd9cb7e92bd397f128f5de7619887 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Wed, 1 Feb 2017 23:58:37 +0200
Subject: [PATCH 5/5] Fix linking.
---
README.md | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 466c22b..f273f8f 100644
--- a/README.md
+++ b/README.md
@@ -18,4 +18,8 @@ the Tcsh Bugs mailing list:
> tcsh-bugs@mx.gw.com
-[![Build Status](https://travis-ci.org/tcsh-org/tcsh.svg?branch=master)](https://travis-ci.org/tcsh-org/tcsh)
+[![Build Status][status]][travis]
+
+[BUILDING]: BUILDING
+[status]: https://travis-ci.org/tcsh-org/tcsh.svg?branch=master
+[travis]: https://travis-ci.org/tcsh-org/tcsh
--
2.9.3

View File

@ -1,60 +0,0 @@
From 7fd9ae6ddd1dc726c354f5ed7f8104b1a6e35d93 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Fri, 10 Feb 2017 13:44:34 +0000
Subject: [PATCH 1/2] Look for tgetent in libtinfo as well (Werner Fink)
---
configure | 2 +-
configure.ac | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index 2a56740..28bcc16 100755
--- a/configure
+++ b/configure
@@ -4284,7 +4284,7 @@ return tgetent ();
return 0;
}
_ACEOF
-for ac_lib in '' termlib termcap curses ncurses; do
+for ac_lib in '' termlib tinfo termcap curses ncurses; do
if test -z "$ac_lib"; then
ac_res="none required"
else
diff --git a/configure.ac b/configure.ac
index 0515787..4a964ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -315,7 +315,7 @@ esac
dnl Checks for libraries
AC_SEARCH_LIBS(crypt, crypt)
AC_SEARCH_LIBS(getspnam, sec)
-AC_SEARCH_LIBS([tgetent], [termlib termcap curses ncurses], [], [
+AC_SEARCH_LIBS([tgetent], [termlib tinfo termcap curses ncurses], [], [
AC_MSG_ERROR([unable to find the tgetent() function])
])
AC_SEARCH_LIBS(gethostbyname, nsl)
--
2.9.3
From a177220dce0f757cbba7a6476e1a44b1b7207925 Mon Sep 17 00:00:00 2001
From: Kimmo Suominen <kimmo@suominen.com>
Date: Fri, 10 Feb 2017 16:51:05 +0200
Subject: [PATCH 2/2] Look for tgetent in libtinfo as well (Werner Fink)
---
Fixes | 1 +
1 file changed, 1 insertion(+)
diff --git a/Fixes b/Fixes
index aec768e..7bd907d 100644
--- a/Fixes
+++ b/Fixes
@@ -1,3 +1,4 @@
+ 5. Look for tgetent in libtinfo as well (Werner Fink)
4. Don't play pointer tricks that are undefined in modern c (Brooks Davis)
3. Fix out of bounds read (Brooks Davis)
2. Fix type of read in prompt confirmation (eg. rmstar) (David Kaspar)
--
2.9.3

View File

@ -1,43 +0,0 @@
From 8e6dfd53321a0b0047f7d75db21a946c166c600b Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos@zoulas.com>
Date: Fri, 17 Feb 2017 11:17:27 -0500
Subject: [PATCH] Unfortunately the AsciiOnly reversion causes a SEGV because
*ch is used to index in the command array, and now contains INVALID_BYTE. env
-i ./tcsh <meta>b
---
ed.inputl.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/ed.inputl.c b/ed.inputl.c
index f543a6f..1a0d356 100644
--- a/ed.inputl.c
+++ b/ed.inputl.c
@@ -796,13 +796,17 @@ GetNextChar(Char *cp)
return -1;
}
}
- cbp++;
- if (normal_mbtowc(cp, cbuf, cbp) == -1) {
- reset_mbtowc();
- if (cbp < MB_CUR_MAX)
- continue; /* Maybe a partial character */
- /* And drop the following bytes, if any */
- *cp = (unsigned char)*cbuf | INVALID_BYTE;
+ if (AsciiOnly) {
+ *cp = (unsigned char)*cbuf;
+ } else {
+ cbp++;
+ if (normal_mbtowc(cp, cbuf, cbp) == -1) {
+ reset_mbtowc();
+ if (cbp < MB_CUR_MAX)
+ continue; /* Maybe a partial character */
+ /* And drop the following bytes, if any */
+ *cp = (unsigned char)*cbuf | INVALID_BYTE;
+ }
}
break;
}
--
2.9.3

View File

@ -1,39 +0,0 @@
From 2ad4fc1705893207598ed5cd21713ddf3f17bba0 Mon Sep 17 00:00:00 2001
From: zoulasc <christos@zoulas.com>
Date: Thu, 23 Feb 2017 11:55:33 -0500
Subject: [PATCH]
https://github.com/tcsh-org/tcsh/pull/1#issuecomment-282035528
---
tests/lexical.at | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/lexical.at b/tests/lexical.at
index 7b7da4e..3dc6024 100644
--- a/tests/lexical.at
+++ b/tests/lexical.at
@@ -567,10 +567,10 @@ run=3
]])
AT_DATA([uniformity_test.csh],
[[
-set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'`
+set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'`
echo -n "$SERVICE_NAME_LOG" > ./output1
-cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2
+cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2
diff -uprN ./output1 ./output2 >& /dev/null
@@ -587,7 +587,7 @@ AT_DATA([quoting_result_test.csh],
echo "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP\)(HOST=db\)(PORT=1521\)\)(CONNECT_DATA=(SERVER=DEDICATED\)(SERVICE_NAME=bns03\)\)\)" > ./expected_result
set string = "jdbc_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))"
-set SERVICE_NAME_LOG = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'`
+set SERVICE_NAME_LOG = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'`
echo "$SERVICE_NAME_LOG" > ./actual_result
--
2.9.3

View File

@ -1,48 +0,0 @@
From 1ef6e9d0eef9278829f863fff55755b7a5415b81 Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos@zoulas.com>
Date: Fri, 11 Jan 2019 10:49:54 -0500
Subject: [PATCH] Abort history loading on long lines
diff --git a/sh.lex.c b/sh.lex.c
index fee790a..e945795 100644
--- a/sh.lex.c
+++ b/sh.lex.c
@@ -145,6 +145,7 @@ lex(struct wordent *hp)
struct wordent *wdp;
eChar c;
int parsehtime = enterhist;
+ int toolong = 0;
histvalid = 0;
histline.len = 0;
@@ -179,6 +180,8 @@ lex(struct wordent *hp)
wdp = new;
wdp->word = word(parsehtime);
parsehtime = 0;
+ if (enterhist && toolong++ > 10 * 1024)
+ stderror(ERR_LTOOLONG);
} while (wdp->word[0] != '\n');
cleanup_ignore(hp);
cleanup_until(hp);
@@ -291,9 +294,12 @@ word(int parsehtime)
Char hbuf[12];
int h;
int dolflg;
+ int toolong = 0;
cleanup_push(&wbuf, Strbuf_cleanup);
loop:
+ if (enterhist && toolong++ > 256 * 1024)
+ seterror(ERR_WTOOLONG);
while ((c = getC(DOALL)) == ' ' || c == '\t')
continue;
if (cmap(c, _META | _ESC))
@@ -352,6 +358,8 @@ word(int parsehtime)
c1 = 0;
dolflg = DOALL;
for (;;) {
+ if (enterhist && toolong++ > 256 * 1024)
+ seterror(ERR_WTOOLONG);
if (c1) {
if (c == c1) {
c1 = 0;

View File

@ -1,47 +0,0 @@
From 83c5be028419b3f27c3cc707b88fb21bfa4e1b11 Mon Sep 17 00:00:00 2001
From: zoulasc <christos@zoulas.com>
Date: Sat, 19 Oct 2019 08:52:53 -0400
Subject: [PATCH] FIx PR/113: failing -c command causes infinite loop
diff --git a/sh.c b/sh.c
index 4b5c624..dd87172 100644
--- a/sh.c
+++ b/sh.c
@@ -237,6 +237,7 @@ main(int argc, char **argv)
int nofile = 0;
volatile int nverbose = 0;
volatile int rdirs = 0;
+ volatile int exitcode = 0;
int quitit = 0;
Char *cp;
#ifdef AUTOLOGOUT
@@ -1390,6 +1391,12 @@ main(int argc, char **argv)
if (targinp) {
+ /* If this -c command caused an error before, skip processing */
+ if (reenter && arginp) {
+ exitcode = 1;
+ goto done;
+ }
+
arginp = SAVE(targinp);
/*
* we put the command into a variable
@@ -1422,6 +1429,7 @@ main(int argc, char **argv)
*/
process(setintr);
+done:
/*
* Mop-up.
*/
@@ -1443,7 +1451,7 @@ main(int argc, char **argv)
}
record();
exitstat();
- return (0);
+ return exitcode;
}
void

View File

@ -1,25 +0,0 @@
From 4723e1754cd28657183358334fe77fe328f01bd0 Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos.zoulas@twosigma.com>
Date: Fri, 18 Oct 2019 13:35:49 -0400
Subject: [PATCH] When the load of history caused an error, say so.
diff --git a/sh.err.c b/sh.err.c
index c676f5e..010b23c 100644
--- a/sh.err.c
+++ b/sh.err.c
@@ -43,6 +43,7 @@
#endif
char *seterr = NULL; /* Holds last error if there was one */
+extern int enterhist;
#define ERR_FLAGS 0xf0000000
#define ERR_NAME 0x10000000
@@ -630,6 +631,8 @@ stderror(unsigned int id, ...)
*/
flush();/*FIXRESET*/
haderr = 1; /* Now to diagnostic output */
+ if (enterhist)
+ xprintf("Can't load history: ");/*FIXRESET*/
if (flags & ERR_NAME)
xprintf("%s: ", bname);/*FIXRESET*/
if ((flags & ERR_OLD)) {

View File

@ -1,31 +0,0 @@
From 67db04d8d8ada0aa2fb7dfdf83f3a408ad5a01dc Mon Sep 17 00:00:00 2001
From: zoulasc <christos@zoulas.com>
Date: Mon, 20 Jan 2020 11:29:01 -0500
Subject: [PATCH] Prevent phup() and record() from being executed more than
once because writing history recursively deadlocks (Brett Frankenberger)
diff --git a/sh.c b/sh.c
index dd87172..75ba62d 100644
--- a/sh.c
+++ b/sh.c
@@ -1839,6 +1839,10 @@ exitstat(void)
void
phup(void)
{
+ static int again = 0;
+ if (again++)
+ return;
+
if (loginsh) {
setcopy(STRlogout, STRhangup, VAR_READWRITE);
#ifdef _PATH_DOTLOGOUT
@@ -2516,6 +2520,10 @@ defaultpath(void)
static void
record(void)
{
+ static int again = 0;
+ if (again++)
+ return;
+
if (!fast) {
recdirs(NULL, adrof(STRsavedirs) != NULL);
rechist(NULL, adrof(STRsavehist) != NULL);

View File

@ -1,35 +0,0 @@
From 38ffe6da549152a0c411407f5846d0b8896bc25c Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Thu, 30 Jul 2020 09:42:39 +0200
Subject: [PATCH] Call stderror consistently and avoid inf loops
Suggested by Kamil Dudka
---
sh.lex.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sh.lex.c b/sh.lex.c
index a10436c..fcaae97 100644
--- a/sh.lex.c
+++ b/sh.lex.c
@@ -304,7 +304,7 @@ word(int parsehtime)
cleanup_push(&wbuf, Strbuf_cleanup);
loop:
if (enterhist && toolong++ > 256 * 1024)
- seterror(ERR_WTOOLONG);
+ stderror(ERR_WTOOLONG);
while ((c = getC(DOALL)) == ' ' || c == '\t')
continue;
if (cmap(c, _META | _ESC))
@@ -364,7 +364,7 @@ loop:
dolflg = DOALL;
for (;;) {
if (enterhist && toolong++ > 256 * 1024)
- seterror(ERR_WTOOLONG);
+ stderror(ERR_WTOOLONG);
if (c1) {
if (c == c1) {
c1 = 0;
--
2.25.4

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (tcsh-6.22.03.tar.gz) = 348ab3706ad334133f211251458b40e9e68816ae0b505aba9091589b77ddb10a444fea6662844f6366fa6026a71fac5e7f3c4bbc7ff972bce7f5a8d19612f390

View File

@ -1,17 +1,13 @@
From cab544f34758f71ab3070f343efb6daee68daf81 Mon Sep 17 00:00:00 2001 From 04a68ad191cfcb87cdff70a6b913721e423cd28b Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build> From: Christos Zoulas <christos@zoulas.com>
Date: Wed, 8 Sep 2021 11:00:35 +0200 Date: Mon, 23 Aug 2021 08:31:59 -0400
Subject: [PATCH] Modifiers no longer breaks history Subject: [PATCH] Fix bug reported by Jan Macku: alias postcmd '/bin/echo
-n "COMMAND:"'"'"'\!#:-$:gx'"'"'' echo 1 2 3 4 5 ^P prints echo 1
Fix bug reported by Jan Macku: alias postcmd '/bin/echo 2 3 4 Reason: domod() enters junk history entries with event number
-n "COMMAND:"'"'"'\!#:-$:gx'"'"'' echo 1 2 3 4 5
^P prints echo 1 2 3 4
Reason: domod() enters junk history entries with event number
HIST_PURGE aliasrun which is used to run postcmd modifies the history HIST_PURGE aliasrun which is used to run postcmd modifies the history
appending those entries. Fix by explicitly cleaning up those entries in appending those entries. Fix by explicitly cleaning up those entries in
aliasrun aliasrun
Based on upstream patch: 04a68ad191cfcb87cdff70a6b913721e423cd28b from Christos Zoulas <christos@zoulas.com>
--- ---
sh.decls.h | 1 + sh.decls.h | 1 +
sh.hist.c | 11 +++++++++++ sh.hist.c | 11 +++++++++++
@ -19,10 +15,10 @@ Fix bug reported by Jan Macku: alias postcmd '/bin/echo
3 files changed, 14 insertions(+) 3 files changed, 14 insertions(+)
diff --git a/sh.decls.h b/sh.decls.h diff --git a/sh.decls.h b/sh.decls.h
index 8dc22d5..a75563b 100644 index e230becd..1ac9716e 100644
--- a/sh.decls.h --- a/sh.decls.h
+++ b/sh.decls.h +++ b/sh.decls.h
@@ -218,6 +218,7 @@ extern int t_pmatch (const Char *, const Char *, @@ -217,6 +217,7 @@ extern int t_pmatch (const Char *, const Char *,
*/ */
extern void dohist (Char **, struct command *); extern void dohist (Char **, struct command *);
extern struct Hist *enthist (int, struct wordent *, int, int, int); extern struct Hist *enthist (int, struct wordent *, int, int, int);
@ -31,10 +27,10 @@ index 8dc22d5..a75563b 100644
extern char *fmthist (int, ptr_t); extern char *fmthist (int, ptr_t);
extern void rechist (Char *, int); extern void rechist (Char *, int);
diff --git a/sh.hist.c b/sh.hist.c diff --git a/sh.hist.c b/sh.hist.c
index 1abd522..bafc711 100644 index 14d862a3..40660bdc 100644
--- a/sh.hist.c --- a/sh.hist.c
+++ b/sh.hist.c +++ b/sh.hist.c
@@ -1178,6 +1178,17 @@ dohist(Char **vp, struct command *c) @@ -1184,6 +1184,17 @@ dohist(Char **vp, struct command *c)
} }
} }
@ -53,7 +49,7 @@ index 1abd522..bafc711 100644
char * char *
fmthist(int fmt, ptr_t ptr) fmthist(int fmt, ptr_t ptr)
diff --git a/tc.func.c b/tc.func.c diff --git a/tc.func.c b/tc.func.c
index feb1c89..4849b55 100644 index 9f2b1a29..df4aa7a3 100644
--- a/tc.func.c --- a/tc.func.c
+++ b/tc.func.c +++ b/tc.func.c
@@ -999,6 +999,7 @@ aliasrun(int cnt, Char *s1, Char *s2) @@ -999,6 +999,7 @@ aliasrun(int cnt, Char *s1, Char *s2)
@ -68,10 +64,7 @@ index feb1c89..4849b55 100644
} }
cleanup_until(&w); cleanup_until(&w);
pendjob(); pendjob();
+ cleanhist(); + cleanhist();
/* Restore status */ /* Restore status */
setv(STRstatus, putn((tcsh_number_t)status), VAR_READWRITE); setv(STRstatus, putn((tcsh_number_t)status), VAR_READWRITE);
} }
--
2.31.1

View File

@ -1,20 +1,27 @@
From 534e2628b598b38801759535f38c228793253345 Mon Sep 17 00:00:00 2001 From c14852867786c798f98a23d075e76a2e2acce204 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build> From: Christos Zoulas <christos@zoulas.com>
Date: Wed, 8 Sep 2021 10:52:43 +0200 Date: Mon, 23 Aug 2021 08:30:57 -0400
Subject: [PATCH] Expose HIST_PURGE - Compare pointer against null - Use Subject: [PATCH] - Expose HIST_PURGE - Compare pointer against null - Use
initlex() initlex()
Based on upstream patch c14852867786c798f98a23d075e76a2e2acce204 from Christos Zoulas <christos@zoulas.com>
--- ---
sh.h | 1 + sh.h | 2 ++
sh.lex.c | 6 ++---- sh.lex.c | 6 ++----
2 files changed, 3 insertions(+), 4 deletions(-) 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/sh.h b/sh.h diff --git a/sh.h b/sh.h
index a41e2e0..5f9cb14 100644 index 3c285a9e..77e801c6 100644
--- a/sh.h --- a/sh.h
+++ b/sh.h +++ b/sh.h
@@ -1019,6 +1019,7 @@ EXTERN struct varent { @@ -78,6 +78,7 @@ typedef unsigned long intptr_t;
#if defined(KANJI) && defined(WIDE_STRINGS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
#define AUTOSET_KANJI
#endif
+
/*
* Sanity
*/
@@ -1027,6 +1028,7 @@ EXTERN struct varent {
* The following are for interfacing redo substitution in * The following are for interfacing redo substitution in
* aliases to the lexical routines. * aliases to the lexical routines.
*/ */
@ -23,20 +30,20 @@ index a41e2e0..5f9cb14 100644
EXTERN struct wordent *alhistt IZERO_STRUCT;/* Node after last in arg list */ EXTERN struct wordent *alhistt IZERO_STRUCT;/* Node after last in arg list */
EXTERN Char **alvec IZERO_STRUCT, EXTERN Char **alvec IZERO_STRUCT,
diff --git a/sh.lex.c b/sh.lex.c diff --git a/sh.lex.c b/sh.lex.c
index b754fd3..065c78b 100644 index 5b0c6d8d..afe053e5 100644
--- a/sh.lex.c --- a/sh.lex.c
+++ b/sh.lex.c +++ b/sh.lex.c
@@ -155,8 +155,7 @@ lex(struct wordent *hp) @@ -153,8 +153,7 @@ lex(struct wordent *hp)
histline.len = 0;
btell(&lineloc); if (!postcmd_active)
btell(&lineloc);
- hp->next = hp->prev = hp; - hp->next = hp->prev = hp;
- hp->word = STRNULL; - hp->word = STRNULL;
+ initlex(hp); + initlex(hp);
hadhist = 0; hadhist = 0;
do do
c = readc(0); c = readc(0);
@@ -703,7 +702,7 @@ getexcl(Char sc) @@ -711,7 +710,7 @@ getexcl(Char sc)
lastev = eventno; lastev = eventno;
hp = gethent(sc); hp = gethent(sc);
@ -45,7 +52,7 @@ index b754fd3..065c78b 100644
return; return;
hadhist = 1; hadhist = 1;
dol = 0; dol = 0;
@@ -893,7 +892,6 @@ getsub(struct wordent *en) @@ -901,7 +900,6 @@ getsub(struct wordent *en)
* We raise the limit to 50000000 * We raise the limit to 50000000
*/ */
@ -53,6 +60,3 @@ index b754fd3..065c78b 100644
static struct wordent * static struct wordent *
dosub(Char sc, struct wordent *en, int global) dosub(Char sc, struct wordent *en, int global)
{ {
--
2.31.1

View File

@ -12,8 +12,8 @@
Name: tcsh Name: tcsh
Summary: An enhanced version of csh, the C shell Summary: An enhanced version of csh, the C shell
Version: 6.20.00 Version: 6.22.03
Release: 15%{?dist} Release: 6%{?dist}
License: BSD License: BSD
URL: http://www.tcsh.org/ URL: http://www.tcsh.org/
@ -27,6 +27,7 @@ Requires(post): coreutils
Requires(post): grep Requires(post): grep
Requires(postun): sed Requires(postun): sed
BuildRequires: make
BuildRequires: gcc BuildRequires: gcc
BuildRequires: git BuildRequires: git
BuildRequires: autoconf BuildRequires: autoconf
@ -42,31 +43,15 @@ BuildRequires: ncurses-devel
# Upstream patches -- official upstream patches released by upstream since the # Upstream patches -- official upstream patches released by upstream since the
# ---------------- last rebase that are necessary for any reason: # ---------------- last rebase that are necessary for any reason:
Patch000: tcsh-6.20.00-000-add-all-flags-for-gethost-build.patch
Patch001: tcsh-6.20.00-001-delay-arginp-interpreting.patch Patch001: tcsh-6.22.03-expose-HIST_PURGE.patch
Patch002: tcsh-6.20.00-002-type-of-read-in-prompt-confirm.patch Patch002: tcsh-6.22.03-dont-corrupt-history-using-modifiers.patch
Patch003: tcsh-6.20.00-003-fix-out-of-bounds-read.patch
Patch004: tcsh-6.20.00-004-do-not-use-old-pointer-tricks.patch
Patch005: tcsh-6.20.00-005-reset-fixes-numbering.patch
Patch006: tcsh-6.20.00-006-cleanup-in-readme-files.patch
Patch007: tcsh-6.20.00-007-look-for-tgetent-in-libtinfo.patch
Patch008: tcsh-6.20.00-008-guard-ascii-only-reversion.patch
Patch009: tcsh-6.20.00-009-fix-regexp-for-backlash-quoting-tests.patch
Patch010: tcsh-6.20.00-010-fix-memory-consumption-while-loading-corrupted-history.patch
Patch011: tcsh-6.20.00-011-fix-infinite-loop-after-ctrlC.patch
Patch012: tcsh-6.20.00-012-warrning-history-loading.patch
Patch013: tcsh-6.20.00-013-prevent-phup-and-record-from-multiple-execution.patch
Patch014: tcsh-6.20.00-014-call-stderror-consistently-and-avoid-inf-loops.patch
Patch015: tcsh-6.20.00-expose-HIST_PURGE.patch
Patch016: tcsh-6.20.00-dont-corrupt-history-using-modifiers.patch
# Downstream patches -- these should be always included when doing rebase: # Downstream patches -- these should be always included when doing rebase:
# ------------------ # ------------------
Patch100: tcsh-6.20.00-manpage-memoryuse.patch Patch100: tcsh-6.20.00-manpage-memoryuse.patch
# This reverts patch001: tcsh-6.20.00-001-delay-arginp-interpreting.patch
# bug 1845684
Patch101: tcsh-6.20.00-001-delay-arginp-interpreting-revert.patch
# Downstream patches for RHEL -- patches that we keep only in RHEL for various # Downstream patches for RHEL -- patches that we keep only in RHEL for various
# --------------------------- reasons, but are not enabled in Fedora: # --------------------------- reasons, but are not enabled in Fedora:
@ -195,24 +180,74 @@ fi
# ============================================================================= # =============================================================================
%changelog %changelog
* Mon Oct 18 2021 Siteshwar Vashisht <svashisht@redhat.com> - 6.20.00-15 * Mon Sep 06 2021 Jan Macku <jamacku@redhat.com> - 6.22.03-6
- Fix regression caused by bacported patch, command var is now set as before - Modifiers no longer breaks history - rhbz#1997986
Resolves: #1845684
* Wed Sep 08 2021 Jan Macku <jamacku@redhat.com> - 6.20.00-14 * Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 6.22.03-5
- Modifiers no longer breaks history - (#1997981) - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Mon Nov 16 2020 Jan Macku <jamacku@redhat.com> - 6.20.00-13 * Mon Jul 26 2021 Siteshwar Vashisht <svashisht@redhat.com> - 6.22.03-4
- fix regression caused by corrupted history (#1818766) - Bump version number
* Fri Nov 01 2019 Jan Macku <jamacku@redhat.com> - 6.20.00-12 * Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 6.22.03-3
- rebuilt - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Fri Nov 01 2019 Jan Macku <jamacku@redhat.com> - 6.20.00-11 * Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 6.22.03-2
- rebuilt - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Thu Oct 31 2019 Jan Macku <jamacku@redhat.com> - 6.20.00-10 * Thu Nov 19 2020 Jan Macku <jamacku@redhat.com> - 6.22.03-1
- fix for rapid memory consumption caused by corrupted history (#1765649) - Update to tcsh-6.22.03
- Drop tcsh-6.22.02-avoid-gcc-to-fail.patch - applied by upstream
- Drop tcsh-6.22.02-call-seterror-consistently-and-abort-quickly.patch - applied by upstream
- Drop tcsh-6.22.02-avoid-crashing-when-loading-corrupted-history.patch - applied by upstream
* Wed Oct 14 2020 Jan Macku <jamacku@redhat.com> - 6.22.02-5
- Switch to stderror() when parsing history so that we stop processing immediately to avoid crashes
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 6.22.02-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Feb 07 2020 Jan Macku <jamacku@redhat.com> - 6.22.02-3
- Avoid gcc 10 to fail during build on "multiple definition of handle_interrupt"
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 6.22.02-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Dec 12 2019 Jan Macku <jamacku@redhat.com> - 6.22.02-1
- Update to tcsh-6.22.02
* Fri Nov 29 2019 Jan Macku <jamacku@redhat.com> - 6.22.00-1
- Update to tcsh-6.22.00
- Drop tcsh-6.21.00-000-failing-exit-command-causes-infinite-loop.patch - applied by upstream
* Fri Oct 25 2019 Jan Macku <jamacku@redhat.com> - 6.21.00-3
- Added upstream patch to fix infinite loop caused by exit command
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 6.21.00-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu May 16 2019 Jan Macku <jamacku@redhat.com> - 6.21.00-01
- Update to tcsh-6.21.00
- Drop tcsh-6.20.00-000-add-all-flags-for-gethost-build.patch - applied by upstream
- Drop tcsh-6.20.00-001-delay-arginp-interpreting.Patches - applied by upstream
- Drop tcsh-6.20.00-002-type-of-read-in-prompt-confirm.patch - applied by upstream
- Drop tcsh-6.20.00-003-fix-out-of-bounds-read.patch - applied by upstream
- Drop tcsh-6.20.00-004-do-not-use-old-pointer-tricks.patch - applied by upstream
- Drop tcsh-6.20.00-005-reset-fixes-numbering.patch - applied by upstream
- Drop tcsh-6.20.00-006-cleanup-in-readme-files.patch - applied by upstream
- Drop tcsh-6.20.00-007-look-for-tgetent-in-libtinfo.patch - applied by upstream
- Drop tcsh-6.20.00-008-guard-ascii-only-reversion.patch - applied by upstream
- Drop tcsh-6.20.00-009-fix-regexp-for-backlash-quoting-tests.patch - applied by upstream
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 6.20.00-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Mon Jan 14 2019 Björn Esser <besser82@fedoraproject.org> - 6.20.00-11
- Rebuilt for libcrypt.so.2 (#1666033)
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 6.20.00-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 6.20.00-9 * Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 6.20.00-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild