mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix crash: do not list jobs if there is no job control
This bug caused an undefined state, which sometimes crashed the shell in job_list() or job_unpost(), if $PS1 contains a command substitution running an external command and the '-b'/'-o notify' shell option is active. So far the only known way to trigger the crash is by letting $TMOUT time out the interactive shell. See https://github.com/ksh93/ksh/issues/103 for details. src/cmd/ksh93/sh/jobs.c: job_reap(): - The check for the SH_NOTIFY option and the SH_TTYWAIT state before listing jobs was insufficient. Job control is disabled in command substitutions, so also check that job control is active before listing jobs. src/cmd/ksh93/sh.1: - Fix TMOUT documentation. The 'read' command in fact only times out when reading from a terminal, just like 'select'. Also document the extra 60 second grace period when an interactive shell prompt reads from a terminal. Fixes: https://github.com/ksh93/ksh/issues/103
This commit is contained in:
parent
49ae483574
commit
338586896d
4 changed files with 12 additions and 11 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.
|
Any uppercase BUG_* names are modernish shell bug IDs.
|
||||||
|
|
||||||
|
2020-08-06:
|
||||||
|
|
||||||
|
- Fixed a crash that occurred intermittently if 'set -b'/'set -o notify' is
|
||||||
|
active and $PS1 contains a command substitution running an external command.
|
||||||
|
|
||||||
2020-08-05:
|
2020-08-05:
|
||||||
|
|
||||||
- Fixed a bug in functions that caused ksh to crash when an array with an
|
- Fixed a bug in functions that caused ksh to crash when an array with an
|
||||||
|
|
|
@ -17,4 +17,4 @@
|
||||||
* David Korn <dgk@research.att.com> *
|
* David Korn <dgk@research.att.com> *
|
||||||
* *
|
* *
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
#define SH_RELEASE "93u+m 2020-08-05"
|
#define SH_RELEASE "93u+m 2020-08-06"
|
||||||
|
|
|
@ -2185,20 +2185,16 @@ is used. If the value is null, no timing information is displayed.
|
||||||
.TP
|
.TP
|
||||||
.B
|
.B
|
||||||
.SM TMOUT
|
.SM TMOUT
|
||||||
If set to a value greater than zero,
|
Terminal read timeout. If set to a value greater than zero, the
|
||||||
.B
|
|
||||||
.SM TMOUT
|
|
||||||
will be the default timeout value for the
|
|
||||||
.B read
|
.B read
|
||||||
built-in command.
|
built-in command and the
|
||||||
The
|
|
||||||
.B select
|
.B select
|
||||||
compound command terminates after
|
compound command time out after
|
||||||
.B
|
.B
|
||||||
.SM TMOUT
|
.SM TMOUT
|
||||||
seconds when input is from a terminal.
|
seconds when input is from a terminal.
|
||||||
Otherwise,
|
An interactive shell will issue a warning and allow for an extra 60 second
|
||||||
the shell will terminate if a line is not entered within
|
timeout grace period before terminating if a line is not entered within
|
||||||
the prescribed number of seconds while reading from a terminal.
|
the prescribed number of seconds while reading from a terminal.
|
||||||
(Note that the shell can be compiled with a maximum bound
|
(Note that the shell can be compiled with a maximum bound
|
||||||
for this value which cannot be exceeded.)
|
for this value which cannot be exceeded.)
|
||||||
|
|
|
@ -460,7 +460,7 @@ int job_reap(register int sig)
|
||||||
nochild = 1;
|
nochild = 1;
|
||||||
}
|
}
|
||||||
shp->gd->waitevent = waitevent;
|
shp->gd->waitevent = waitevent;
|
||||||
if(sh_isoption(SH_NOTIFY) && sh_isstate(SH_TTYWAIT))
|
if(job.jobcontrol && sh_isoption(SH_NOTIFY) && sh_isstate(SH_TTYWAIT))
|
||||||
{
|
{
|
||||||
outfile = sfstderr;
|
outfile = sfstderr;
|
||||||
job_list(pw,JOB_NFLAG|JOB_NLFLAG);
|
job_list(pw,JOB_NFLAG|JOB_NLFLAG);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue