[3.6] bpo-31471: Fix assertion failure in subprocess.Popen() on Windows, in case env has a bad keys() method. (GH-3580) (#3584)
(cherry picked from commit 0b3a87ef54
)
This commit is contained in:
parent
20fa05d022
commit
f135f62cfd
|
@ -2735,6 +2735,15 @@ class Win32ProcessTestCase(BaseTestCase):
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
close_fds=True)
|
close_fds=True)
|
||||||
|
|
||||||
|
@support.cpython_only
|
||||||
|
def test_issue31471(self):
|
||||||
|
# There shouldn't be an assertion failure in Popen() in case the env
|
||||||
|
# argument has a bad keys() method.
|
||||||
|
class BadEnv(dict):
|
||||||
|
keys = None
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
subprocess.Popen([sys.executable, "-c", "pass"], env=BadEnv())
|
||||||
|
|
||||||
def test_close_fds(self):
|
def test_close_fds(self):
|
||||||
# close file descriptors
|
# close file descriptors
|
||||||
rc = subprocess.call([sys.executable, "-c",
|
rc = subprocess.call([sys.executable, "-c",
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix an assertion failure in `subprocess.Popen()` on Windows, in case the env
|
||||||
|
argument has a bad keys() method. Patch by Oren Milman.
|
|
@ -723,9 +723,13 @@ getenvironment(PyObject* environment)
|
||||||
}
|
}
|
||||||
|
|
||||||
keys = PyMapping_Keys(environment);
|
keys = PyMapping_Keys(environment);
|
||||||
|
if (!keys) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
values = PyMapping_Values(environment);
|
values = PyMapping_Values(environment);
|
||||||
if (!keys || !values)
|
if (!values) {
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
envsize = PySequence_Fast_GET_SIZE(keys);
|
envsize = PySequence_Fast_GET_SIZE(keys);
|
||||||
if (PySequence_Fast_GET_SIZE(values) != envsize) {
|
if (PySequence_Fast_GET_SIZE(values) != envsize) {
|
||||||
|
|
Loading…
Reference in New Issue