mirror of https://github.com/python/cpython
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
constructor has failed, e.g. because of an undeclared keyword argument. Patch written by Oleg Oshmyan.
This commit is contained in:
parent
ee49797c8d
commit
87b9bc3893
|
@ -768,7 +768,10 @@ class Popen(object):
|
|||
self.wait()
|
||||
|
||||
def __del__(self, _maxsize=sys.maxsize, _active=_active):
|
||||
if not self._child_created:
|
||||
# If __init__ hasn't had a chance to execute (e.g. if it
|
||||
# was passed an undeclared keyword argument), we don't
|
||||
# have a _child_created attribute at all.
|
||||
if not getattr(self, '_child_created', False):
|
||||
# We didn't get to successfully create a child process.
|
||||
return
|
||||
# In case the child hasn't been waited on, check if it's done.
|
||||
|
|
|
@ -121,6 +121,16 @@ class ProcessTestCase(BaseTestCase):
|
|||
env=newenv)
|
||||
self.assertEqual(rc, 1)
|
||||
|
||||
def test_invalid_args(self):
|
||||
# Popen() called with invalid arguments should raise TypeError
|
||||
# but Popen.__del__ should not complain (issue #12085)
|
||||
with support.captured_stderr() as s:
|
||||
self.assertRaises(TypeError, subprocess.Popen, invalid_arg_name=1)
|
||||
argcount = subprocess.Popen.__init__.__code__.co_argcount
|
||||
too_many_args = [0] * (argcount + 1)
|
||||
self.assertRaises(TypeError, subprocess.Popen, *too_many_args)
|
||||
self.assertEqual(s.getvalue(), '')
|
||||
|
||||
def test_stdin_none(self):
|
||||
# .stdin is None when not redirected
|
||||
p = subprocess.Popen([sys.executable, "-c", 'print("banana")'],
|
||||
|
|
|
@ -650,6 +650,7 @@ Piet van Oostrum
|
|||
Jason Orendorff
|
||||
Douglas Orr
|
||||
Michele Orrù
|
||||
Oleg Oshmyan
|
||||
Denis S. Otkidach
|
||||
Michael Otteneder
|
||||
R. M. Oudkerk
|
||||
|
|
|
@ -22,6 +22,10 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #12085: Fix an attribute error in subprocess.Popen destructor if the
|
||||
constructor has failed, e.g. because of an undeclared keyword argument. Patch
|
||||
written by Oleg Oshmyan.
|
||||
|
||||
- Issue #985064: Make plistlib more resilient to faulty input plists.
|
||||
Patch by Mher Movsisyan.
|
||||
|
||||
|
|
Loading…
Reference in New Issue