Skip to content

Commit 0141521

Browse files
ZeroIntensitysobolevnpicnixz
authored
gh-126223: Propagate unicode errors in _interpreters.create() (#126224)
Co-authored-by: sobolevn <[email protected]> Co-authored-by: Bénédikt Tran <[email protected]>
1 parent 8c22eba commit 0141521

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

Lib/test/test_interpreters/test_api.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ def test_in_main(self):
5454
self.assertIsInstance(interp, interpreters.Interpreter)
5555
self.assertIn(interp, interpreters.list_all())
5656

57+
# GH-126221: Passing an invalid Unicode character used to cause a SystemError
58+
self.assertRaises(UnicodeEncodeError, _interpreters.create, '\udc80')
59+
5760
def test_in_thread(self):
5861
lock = threading.Lock()
5962
interp = None
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Raise a :exc:`UnicodeEncodeError` instead of a :exc:`SystemError` upon
2+
calling :func:`!_interpreters.create` with an invalid Unicode character.

Modules/_interpretersmodule.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,11 @@ config_from_object(PyObject *configobj, PyInterpreterConfig *config)
402402
}
403403
}
404404
else if (PyUnicode_Check(configobj)) {
405-
if (init_named_config(config, PyUnicode_AsUTF8(configobj)) < 0) {
405+
const char *utf8name = PyUnicode_AsUTF8(configobj);
406+
if (utf8name == NULL) {
407+
return -1;
408+
}
409+
if (init_named_config(config, utf8name) < 0) {
406410
return -1;
407411
}
408412
}

0 commit comments

Comments
 (0)