From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:46:36 +0000 (+0100) Subject: [3.13] gh-126223: Propagate unicode errors in `_interpreters.create()` (GH-126224... X-Git-Tag: v3.13.1~190 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=89664d4d482b9873b078df29654e4c3fa8ca066f;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-126223: Propagate unicode errors in `_interpreters.create()` (GH-126224) (#126242) gh-126223: Propagate unicode errors in `_interpreters.create()` (GH-126224) (cherry picked from commit 01415213d72504eafc159721a8f55d57b374fd9c) Co-authored-by: Peter Bierma Co-authored-by: sobolevn Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- diff --git a/Lib/test/test_interpreters/test_api.py b/Lib/test/test_interpreters/test_api.py index 719c1c721cad..42819ae9b180 100644 --- a/Lib/test/test_interpreters/test_api.py +++ b/Lib/test/test_interpreters/test_api.py @@ -55,6 +55,9 @@ class CreateTests(TestBase): self.assertIsInstance(interp, interpreters.Interpreter) self.assertIn(interp, interpreters.list_all()) + # GH-126221: Passing an invalid Unicode character used to cause a SystemError + self.assertRaises(UnicodeEncodeError, _interpreters.create, '\udc80') + def test_in_thread(self): lock = threading.Lock() interp = None diff --git a/Misc/NEWS.d/next/Library/2024-10-30-23-42-44.gh-issue-126223.k2qooc.rst b/Misc/NEWS.d/next/Library/2024-10-30-23-42-44.gh-issue-126223.k2qooc.rst new file mode 100644 index 000000000000..fee391c030b9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-10-30-23-42-44.gh-issue-126223.k2qooc.rst @@ -0,0 +1,2 @@ +Raise a :exc:`UnicodeEncodeError` instead of a :exc:`SystemError` upon +calling :func:`!_interpreters.create` with an invalid Unicode character. diff --git a/Modules/_interpretersmodule.c b/Modules/_interpretersmodule.c index 86a4113dcc16..7933febf3cac 100644 --- a/Modules/_interpretersmodule.c +++ b/Modules/_interpretersmodule.c @@ -403,7 +403,11 @@ config_from_object(PyObject *configobj, PyInterpreterConfig *config) } } else if (PyUnicode_Check(configobj)) { - if (init_named_config(config, PyUnicode_AsUTF8(configobj)) < 0) { + const char *utf8name = PyUnicode_AsUTF8(configobj); + if (utf8name == NULL) { + return -1; + } + if (init_named_config(config, utf8name) < 0) { return -1; } }