]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-126223: Propagate unicode errors in `_interpreters.create()` (GH-126224...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 31 Oct 2024 14:46:36 +0000 (15:46 +0100)
committerGitHub <noreply@github.com>
Thu, 31 Oct 2024 14:46:36 +0000 (14:46 +0000)
gh-126223: Propagate unicode errors in `_interpreters.create()` (GH-126224)
(cherry picked from commit 01415213d72504eafc159721a8f55d57b374fd9c)

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Lib/test/test_interpreters/test_api.py
Misc/NEWS.d/next/Library/2024-10-30-23-42-44.gh-issue-126223.k2qooc.rst [new file with mode: 0644]
Modules/_interpretersmodule.c

index 719c1c721cad7c031eefdf8d1d3e5ec3fc7d9126..42819ae9b180b46beabab9b3502c8943272ee141 100644 (file)
@@ -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 (file)
index 0000000..fee391c
--- /dev/null
@@ -0,0 +1,2 @@
+Raise a :exc:`UnicodeEncodeError` instead of a :exc:`SystemError` upon
+calling :func:`!_interpreters.create` with an invalid Unicode character.
index 86a4113dcc16f1d69e5b672df4ba01730c591c42..7933febf3cacfc7e957a71a723edb4be2744366f 100644 (file)
@@ -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;
         }
     }