]> granicus.if.org Git - vim/commitdiff
patch 8.0.0842: using slave pty after closing it v8.0.0842
authorBram Moolenaar <Bram@vim.org>
Wed, 2 Aug 2017 20:33:28 +0000 (22:33 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 2 Aug 2017 20:33:28 +0000 (22:33 +0200)
Problem:    Using slave pty after closing it.
Solution:   Do the ioctl() before dup'ing it.

src/os_unix.c
src/version.c

index fb2628c7e46f878693f1891c7fb6022365d9a648..7c4b3180e59338f214364eba6a43d04dd4fc2cf8 100644 (file)
@@ -5316,6 +5316,17 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options)
        if (use_null_for_in || use_null_for_out || use_null_for_err)
            null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0);
 
+       if (pty_slave_fd >= 0)
+       {
+           /* push stream discipline modules */
+           SetupSlavePTY(pty_slave_fd);
+#  ifdef TIOCSCTTY
+           /* Try to become controlling tty (probably doesn't work,
+            * unless run by root) */
+           ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL);
+#  endif
+       }
+
        /* set up stdin for the child */
        close(0);
        if (use_null_for_in && null_fd >= 0)
@@ -5362,24 +5373,13 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options)
            close(fd_err[1]);
        if (pty_master_fd >= 0)
        {
-           close(pty_master_fd); /* not used */
-           close(pty_slave_fd); /* duped above */
+           close(pty_master_fd); /* not used in the child */
+           close(pty_slave_fd);  /* was duped above */
        }
 
        if (null_fd >= 0)
            close(null_fd);
 
-       if (pty_slave_fd >= 0)
-       {
-           /* push stream discipline modules */
-           SetupSlavePTY(pty_slave_fd);
-#  ifdef TIOCSCTTY
-           /* Try to become controlling tty (probably doesn't work,
-            * unless run by root) */
-           ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL);
-#  endif
-       }
-
        /* See above for type of argv. */
        execvp(argv[0], argv);
 
index 19ad732cbf3dfbd1329dbfef6393138b0e434e70..0ef1f452b0807b102a559c732b88ef0ed49ebe8f 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    842,
 /**/
     841,
 /**/