[3.13] gh-126654: Fix crash in several functions in _interpreters module (GH-126678) (#126681)

gh-126654: Fix crash in several functions in `_interpreters` module (GH-126678)
(cherry picked from commit 9fc2808eaf)

Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2024-11-11 13:01:22 +01:00 committed by GitHub
parent 90cf1af325
commit e194b21753
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 25 additions and 0 deletions

View file

@ -551,6 +551,24 @@ class DestroyTests(TestBase):
self.assertTrue(_interpreters.is_running(interp))
class CommonTests(TestBase):
def setUp(self):
super().setUp()
self.id = _interpreters.create()
def test_signatures(self):
# for method in ['exec', 'run_string', 'run_func']:
msg = "expected 'shared' to be a dict"
with self.assertRaisesRegex(TypeError, msg):
_interpreters.exec(self.id, 'a', 1)
with self.assertRaisesRegex(TypeError, msg):
_interpreters.exec(self.id, 'a', shared=1)
with self.assertRaisesRegex(TypeError, msg):
_interpreters.run_string(self.id, 'a', shared=1)
with self.assertRaisesRegex(TypeError, msg):
_interpreters.run_func(self.id, lambda: None, shared=1)
class RunStringTests(TestBase):
def setUp(self):

View file

@ -0,0 +1,2 @@
Fix crash when non-dict was passed to several functions in ``_interpreters``
module.

View file

@ -939,6 +939,11 @@ static int
_interp_exec(PyObject *self, PyInterpreterState *interp,
PyObject *code_arg, PyObject *shared_arg, PyObject **p_excinfo)
{
if (shared_arg != NULL && !PyDict_CheckExact(shared_arg)) {
PyErr_SetString(PyExc_TypeError, "expected 'shared' to be a dict");
return -1;
}
// Extract code.
Py_ssize_t codestrlen = -1;
PyObject *bytes_obj = NULL;