Re: [hackers] [st][PATCH 1/1] fix a problem that the standard streams are unexpectedly closed

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Tue, 24 Aug 2021 13:49:48 +0200

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
> _AT_@ -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
Received on Tue Aug 24 2021 - 13:49:48 CEST

This archive was generated by hypermail 2.3.0 : Tue Aug 24 2021 - 14:00:35 CEST