Skip to content

Commit 9ba4410

Browse files
committed
gh-143698: correctly check scheduler type for os.posix_spawn[p]
1 parent e22b685 commit 9ba4410

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

Lib/test/test_os/test_posix.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,6 +2096,12 @@ def test_setsigdef_wrong_type(self):
20962096
[sys.executable, "-c", "pass"],
20972097
os.environ, setsigdef=[signal.NSIG, signal.NSIG+1])
20982098

2099+
@support.subTests("scheduler", [None, 1, [1, 2]])
2100+
def test_invalid_scheduler_param(self, scheduler):
2101+
path, args = self.NOOP_PROGRAM[0], self.NOOP_PROGRAM
2102+
with self.assertRaisesRegex(TypeError, "scheduler must be a tuple"):
2103+
self.spawn_func(path, args, os.environ, scheduler=scheduler)
2104+
20992105
@requires_sched
21002106
@unittest.skipIf(sys.platform.startswith(('freebsd', 'netbsd')),
21012107
"bpo-34685: test can fail on BSD")
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Raise :exc:`TypeError` instead of :exc:`SystemError` when the *scheduler*
2+
in :func:`os.posix_spawn` or :func:`os.posix_spawnp` is not a tuple.
3+
Patch by Bénédikt Tran.

Modules/posixmodule.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7611,6 +7611,7 @@ parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpg
76117611
PyObject *setsigdef, PyObject *scheduler,
76127612
posix_spawnattr_t *attrp)
76137613
{
7614+
assert(scheduler == NULL || PyTuple_Check(scheduler));
76147615
long all_flags = 0;
76157616

76167617
errno = posix_spawnattr_init(attrp);
@@ -7917,6 +7918,12 @@ py_posix_spawn(int use_posix_spawnp, PyObject *module, path_t *path, PyObject *a
79177918
goto exit;
79187919
}
79197920

7921+
if (scheduler && !PyTuple_Check(scheduler)) {
7922+
PyErr_Format(PyExc_TypeError,
7923+
"%s: scheduler must be a tuple", func_name);
7924+
goto exit;
7925+
}
7926+
79207927
argvlist = parse_arglist(argv, &argc);
79217928
if (argvlist == NULL) {
79227929
goto exit;

0 commit comments

Comments
 (0)