Issue #12607: In subprocess, fix issue where if stdin, stdout or stderr is

given as a low fd, it gets overwritten.
This commit is contained in:
Ross Lagerwall 2011-07-27 07:16:31 +02:00
parent 45686b472b
commit d98646e430
4 changed files with 76 additions and 0 deletions

View file

@ -69,6 +69,13 @@ static void child_exec(char *const exec_array[],
}
POSIX_CALL(close(errpipe_read));
/* When duping fds, if there arises a situation where one of the fds is
either 0, 1 or 2, it is possible that it is overwritten (#12607). */
if (c2pwrite == 0)
POSIX_CALL(c2pwrite = dup(c2pwrite));
if (errwrite == 0 || errwrite == 1)
POSIX_CALL(errwrite = dup(errwrite));
/* Dup fds for child.
dup2() removes the CLOEXEC flag but we must do it ourselves if dup2()
would be a no-op (issue #10806). */