mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Issue #22290: Fix error handling in the _posixsubprocess module.
* Don't call the garbage collector with an exception set: it causes an assertion to fail in debug mode. * Enhance also error handling if allocating an array for the executable list failed. * Add an unit test for 4 different errors in the _posixsubprocess module.
This commit is contained in:
parent
340c749a3a
commit
8f437aac06
2 changed files with 47 additions and 6 deletions
|
@ -2216,6 +2216,39 @@ class POSIXProcessTestCase(BaseTestCase):
|
|||
|
||||
self.assertNotIn(fd, remaining_fds)
|
||||
|
||||
@support.cpython_only
|
||||
def test_fork_exec(self):
|
||||
# Issue #22290: fork_exec() must not crash on memory allocation failure
|
||||
# or other errors
|
||||
import _posixsubprocess
|
||||
gc_enabled = gc.isenabled()
|
||||
try:
|
||||
# Use a preexec function and enable the garbage collector
|
||||
# to force fork_exec() to re-enable the garbage collector
|
||||
# on error.
|
||||
func = lambda: None
|
||||
gc.enable()
|
||||
|
||||
executable_list = "exec" # error: must be a sequence
|
||||
|
||||
for args, exe_list, cwd, env_list in (
|
||||
(123, [b"exe"], None, [b"env"]),
|
||||
([b"arg"], 123, None, [b"env"]),
|
||||
([b"arg"], [b"exe"], 123, [b"env"]),
|
||||
([b"arg"], [b"exe"], None, 123),
|
||||
):
|
||||
with self.assertRaises(TypeError):
|
||||
_posixsubprocess.fork_exec(
|
||||
args, exe_list,
|
||||
True, [], cwd, env_list,
|
||||
-1, -1, -1, -1,
|
||||
1, 2, 3, 4,
|
||||
True, True, func)
|
||||
finally:
|
||||
if not gc_enabled:
|
||||
gc.disable()
|
||||
|
||||
|
||||
|
||||
@unittest.skipUnless(mswindows, "Windows specific tests")
|
||||
class Win32ProcessTestCase(BaseTestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue