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

Reply via email to