Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Lib/test/test_interpreters/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ def test_in_main(self):
self.assertIsInstance(interp, interpreters.Interpreter)
self.assertIn(interp, interpreters.list_all())

# GH-126221: Passing an invalid unicode character used to cause a SystemError
with self.assertRaises(UnicodeEncodeError):
_interpreters.create('\udc80')

def test_in_thread(self):
lock = threading.Lock()
interp = None
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fixed :exc:`SystemError` upon calling :func:`!_interpreters.create` with
an invalid unicode character.
7 changes: 6 additions & 1 deletion Modules/_interpretersmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,12 @@ config_from_object(PyObject *configobj, PyInterpreterConfig *config)
}
}
else if (PyUnicode_Check(configobj)) {
if (init_named_config(config, PyUnicode_AsUTF8(configobj)) < 0) {
const char *utf8 = PyUnicode_AsUTF8(configobj);
if (utf8 == NULL)
{
return -1;
}
if (init_named_config(config, utf8) < 0) {
return -1;
}
}
Expand Down
Loading