From fe8943898e689fccc562a907daea36d07d66dcec Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 19 Jun 2025 11:33:33 +0200 Subject: [PATCH] gh-135698: Fix _interpqueues.create(): max_size >= 0 Make sure that the queue maximum size is greater than or equal to 0. --- Lib/test/test_interpreters/test_queues.py | 8 ++++++-- Modules/_interpqueuesmodule.c | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_interpreters/test_queues.py b/Lib/test/test_interpreters/test_queues.py index 3e982d76e86314..67ce41915c5d8c 100644 --- a/Lib/test/test_interpreters/test_queues.py +++ b/Lib/test/test_interpreters/test_queues.py @@ -50,6 +50,10 @@ def test_create_destroy(self): with self.assertRaises(queues.QueueNotFoundError): _queues.destroy(qid) + with self.assertRaises(ValueError): + # gh-135698: max_size must be greater than or equal to 0 + _queues.create(-1, 1, 1) + def test_not_destroyed(self): # It should have cleaned up any remaining queues. stdout, stderr = self.assert_python_ok( @@ -114,8 +118,8 @@ def test_create(self): self.assertEqual(queue.maxsize, 0) with self.subTest('negative maxsize'): - queue = queues.create(-10) - self.assertEqual(queue.maxsize, -10) + with self.assertRaises(ValueError): + queues.create(-10) with self.subTest('bad maxsize'): with self.assertRaises(TypeError): diff --git a/Modules/_interpqueuesmodule.c b/Modules/_interpqueuesmodule.c index e22709d5119b7c..6ee70ab27864d1 100644 --- a/Modules/_interpqueuesmodule.c +++ b/Modules/_interpqueuesmodule.c @@ -1488,6 +1488,11 @@ queuesmod_create(PyObject *self, PyObject *args, PyObject *kwds) { return NULL; } + if (maxsize < 0) { + PyErr_SetString(PyExc_ValueError, + "max_size must be greater than or equal to 0"); + return NULL; + } struct _queuedefaults defaults = {0}; if (resolve_unboundop(unboundarg, UNBOUND_REPLACE, &defaults.unboundop) < 0)