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