From 87b9bc3893bac402bd773a83ee6734507f978607 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 1 Jun 2011 00:57:47 +0200 Subject: [PATCH] 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. --- Lib/subprocess.py | 5 ++++- Lib/test/test_subprocess.py | 10 ++++++++++ Misc/ACKS | 1 + Misc/NEWS | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 28dd691090d..4bcf159864f 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -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. diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index ad89864f2e3..9d6665998e4 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -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")'], diff --git a/Misc/ACKS b/Misc/ACKS index d0e32e17783..aa077fca609 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -650,6 +650,7 @@ Piet van Oostrum Jason Orendorff Douglas Orr Michele OrrĂ¹ +Oleg Oshmyan Denis S. Otkidach Michael Otteneder R. M. Oudkerk diff --git a/Misc/NEWS b/Misc/NEWS index 4ab11a517dc..3703ac5bd76 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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.