mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Johnothan King writes: > There are two regressions related to how ksh handles syntax > errors in the .kshrc file. If ~/.kshrc or the file pointed to by > $ENV have a syntax error, ksh exits during startup. Additionally, > the error message printed is incorrect: > > $ cat /tmp/synerror > (( > echo foo > > # ksh93u+m > $ ENV=/tmp/synerror arch/*/bin/ksh -ic 'echo ${.sh.version}' > /tmp/synerror: syntax error: `/t/tmp/synerror' unmatched > > # ksh93u+ > $ ENV=/tmp/synerror ksh93u -ic 'echo ${.sh.version}' > /tmp/synerror: syntax error: `(' unmatched > Version AJM 93u+ 2012-08-01 > > The regression that causes the incorrect error message was > introduced by commitcb67a01
. The other bug that causes ksh to > exit on startup was introduced by commitceb77b1
. src/cmd/ksh93/sh/lex.c: fmttoken(): - Call stakfreeze(0) to terminate a possible unterminated previous stack item before writing the token string onto the stack. This fixes the bug with garbage in a syntax error message. src/cmd/ksh93/sh/main.c: exfile(): - Revert Red Hat's ksh-20140801-diskfull.patch applied inceb77b13
. This fixes the bug with interactive ksh exiting on syntax error in a profile script. Testing by @JohnoKing showed the patch is no longer necessary to fix a login crash on disk full, as commit970069a6
(which applied Red Hat patches ksh-20120801-macro.patch and ksh-20120801-fd2lost.patch) also fixes that crash. src/cmd/ksh93/README: - Fix typos. (re:fdc08b23
) Co-authored-by: Johnothan King <johnothanking@protonmail.com> Resolves: https://github.com/ksh93/ksh/issues/281
This commit is contained in:
parent
fdc08b239b
commit
b7dde4e747
6 changed files with 25 additions and 5 deletions
5
NEWS
5
NEWS
|
@ -3,6 +3,11 @@ For full details, see the git log at: https://github.com/ksh93/ksh
|
|||
|
||||
Any uppercase BUG_* names are modernish shell bug IDs.
|
||||
|
||||
2021-04-21:
|
||||
|
||||
- Fixed a bug introduced on 2020-09-28 that caused an interactive ksh to exit
|
||||
if a profile script (such as ~/.kshrc) contains a syntax error.
|
||||
|
||||
2021-04-20:
|
||||
|
||||
- Fixed three problems with the /opt/ast/bin/getconf built-in command:
|
||||
|
|
|
@ -44,7 +44,7 @@ The options have the following defaults and meanings:
|
|||
built-ins. The value must include double quotes.
|
||||
CRNL off <cr><nl> treated as <nl> in shell grammar.
|
||||
DEVFD Use the more secure /dev/fd mechanism instead of FIFOs for
|
||||
proces substitutions. On by default on OSs with /dev/fd.
|
||||
process substitutions. On by default on OSs with /dev/fd.
|
||||
DYNAMIC on Dynamic loading of builtins. (Requires dlopen() interface.)
|
||||
ECHOPRINT off Make echo equivalent to print.
|
||||
EDPREDICT on Enables predictive editing. As you type a line beginning
|
||||
|
@ -84,7 +84,7 @@ The options have the following defaults and meanings:
|
|||
value will require the -p flag to run suid/sgid scripts.
|
||||
RAWONLY on Turn on if the vi line mode doesn't work right unless
|
||||
you do a set -o viraw.
|
||||
REGRESS off Enable the __regress__ built-in command and instrumented
|
||||
REGRESS off Enable the __regress__ built-in command and instrumented
|
||||
intercepts for testing.
|
||||
REMOTE off Set --rc (read profile scripts) even if ksh was invoked
|
||||
with standard input on a socket, i.e. as a remote shell.
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
#define SH_RELEASE_FORK "93u+m" /* only change if you develop a new ksh93 fork */
|
||||
#define SH_RELEASE_SVER "1.0.0-alpha" /* semantic version number: https://semver.org */
|
||||
#define SH_RELEASE_DATE "2021-04-20" /* must be in this format for $((.sh.version)) */
|
||||
#define SH_RELEASE_DATE "2021-04-21" /* must be in this format for $((.sh.version)) */
|
||||
#define SH_RELEASE_CPYR "(c) 2020-2021 Contributors to ksh " SH_RELEASE_FORK
|
||||
|
||||
/* Scripts sometimes field-split ${.sh.version}, so don't change amount of whitespace. */
|
||||
|
|
|
@ -2060,6 +2060,7 @@ static char *fmttoken(Lex_t *lp, register int sym)
|
|||
return((char*)sh_translate(e_endoffile));
|
||||
if(sym==NL)
|
||||
return((char*)sh_translate(e_newline));
|
||||
stakfreeze(0);
|
||||
stakputc(sym);
|
||||
if(sym&SYMREP)
|
||||
stakputc(sym);
|
||||
|
|
|
@ -424,7 +424,7 @@ static void exfile(register Shell_t *shp, register Sfio_t *iop,register int fno)
|
|||
sfsync(shp->outpool);
|
||||
shp->st.execbrk = shp->st.breakcnt = 0;
|
||||
/* check for return from profile or env file */
|
||||
if(sh_isstate(SH_PROFILE) && (jmpval==SH_JMPFUN || jmpval==SH_JMPEXIT || jmpval==SH_JMPERREXIT))
|
||||
if(sh_isstate(SH_PROFILE) && (jmpval==SH_JMPFUN || jmpval==SH_JMPEXIT))
|
||||
{
|
||||
sh_setstate(states);
|
||||
goto done;
|
||||
|
@ -603,7 +603,7 @@ done:
|
|||
}
|
||||
if(jmpval == SH_JMPSCRIPT)
|
||||
siglongjmp(*shp->jmplist,jmpval);
|
||||
else if(jmpval == SH_JMPEXIT || jmpval == SH_JMPERREXIT)
|
||||
else if(jmpval == SH_JMPEXIT)
|
||||
sh_done(shp,0);
|
||||
if(fno>0)
|
||||
sh_close(fno);
|
||||
|
|
|
@ -797,5 +797,19 @@ w cd emacste\t123abc
|
|||
r ^:test-1: cd emacstest/123abc\r\n$
|
||||
!
|
||||
|
||||
# err_exit #
|
||||
echo '((' >$tmp/synerror
|
||||
ENV=$tmp/synerror tst $LINENO <<"!"
|
||||
L syntax error in profile causes exit on startup
|
||||
# https://github.com/ksh93/ksh/issues/281
|
||||
|
||||
d 15
|
||||
r /synerror: syntax error: `\(' unmatched\r\n$
|
||||
p :test-1:
|
||||
w echo ok
|
||||
r ^:test-1: echo ok\r\n$
|
||||
r ^ok\r\n$
|
||||
!
|
||||
|
||||
# ======
|
||||
exit $((Errors<125?Errors:125))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue