On Tue, Aug 24, 2021 at 06:25:05AM +0900, Koichi Murase wrote: > In the current implementation, the slave PTY (assigned to the variable > `s') is always closed after duplicating it to file descriptors of > standard streams (0, 1, and 2). However, when the allocated slave PTY > `s' is already one of 0, 1, or 2, this causes unexpected closing of a > standard stream. The same problem occurs when the file descriptor of > the master PTY (the variable `m') is one of 0, 1, or 2. > > In this patch, the original master PTY (m) is closed before it would > be overwritten by duplicated slave PTYs. The original slave PTY (s) > is closed only when it is not one of the stanrad streams. > --- > st.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/st.c b/st.c > index ebdf360..a9338e1 100644 > --- a/st.c > +++ b/st.c > @@ -793,14 +793,15 @@ ttynew(const char *line, char *cmd, const char *out, > char **args) > break; > case 0: > close(iofd); > + close(m); > setsid(); /* create a new process group */ > dup2(s, 0); > dup2(s, 1); > dup2(s, 2); > if (ioctl(s, TIOCSCTTY, NULL) < 0) > die("ioctl TIOCSCTTY failed: %s\n", strerror(errno)); > - close(s); > - close(m); > + if (s > 2) > + close(s); > #ifdef __OpenBSD__ > if (pledge("stdio getpw proc exec", NULL) == -1) > die("pledge\n"); > -- > 2.21.3 > >
Hi Koichi, Thanks, I've pushed the fix. -- Kind regards, Hiltjo