summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorAlexey Izbyshev <izbyshev@users.noreply.github.com>2018-03-26 19:49:35 (GMT)
committerGregory P. Smith <greg@krypto.org>2018-03-26 19:49:35 (GMT)
commit0e7144b064a19493a146af94175a087b3888c37b (patch)
tree6721ceebf7716c7e23266bee1935a7cf24881a3d /Modules
parentde7a2f04d6b9427d568fcb43b6f512f9b4c4bd84 (diff)
downloadcpython-0e7144b064a19493a146af94175a087b3888c37b.zip
cpython-0e7144b064a19493a146af94175a087b3888c37b.tar.gz
cpython-0e7144b064a19493a146af94175a087b3888c37b.tar.bz2
bpo-32844: Fix a subprocess misredirection of a low fd (GH5689)
bpo-32844: subprocess: Fix a potential misredirection of a low fd to stderr. When redirecting, subprocess attempts to achieve the following state: each fd to be redirected to is less than or equal to the fd it is redirected from, which is necessary because redirection occurs in the ascending order of destination descriptors. It fails to do so in a couple of corner cases, for example, if 1 is redirected to 2 and 0 is closed in the parent.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_posixsubprocess.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index dc43ffc..0150fcb 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -424,7 +424,7 @@ child_exec(char *const exec_array[],
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)
+ while (errwrite == 0 || errwrite == 1)
POSIX_CALL(errwrite = dup(errwrite));
/* Dup fds for child.