https://github.com/python/cpython/commit/70671267c11c562c6ca682eebf863616b258c20a
commit: 70671267c11c562c6ca682eebf863616b258c20a
branch: main
author: dr-carlos <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2025-12-10T12:01:57+05:30
summary:

gh-142029: Raise `ValueError` instead of crashing on empty name given to 
`create_builtin()` (#142033)

Co-authored-by: Victor Stinner <[email protected]>

files:
A 
Misc/NEWS.d/next/Core_and_Builtins/2025-11-28-16-45-07.gh-issue-142029.JuXiKu.rst
M Lib/test/test_import/__init__.py
M Python/import.c

diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py
index 271361ae816449..fa4f5e013d4b17 100644
--- a/Lib/test/test_import/__init__.py
+++ b/Lib/test/test_import/__init__.py
@@ -1253,6 +1253,20 @@ class Spec2:
                 origin = "a\x00b"
             _imp.create_dynamic(Spec2())
 
+    def test_create_builtin(self):
+        class Spec:
+            name = None
+        spec = Spec()
+
+        with self.assertRaisesRegex(TypeError, 'name must be string, not 
NoneType'):
+            _imp.create_builtin(spec)
+
+        spec.name = ""
+
+        # gh-142029
+        with self.assertRaisesRegex(ValueError, 'name must not be empty'):
+            _imp.create_builtin(spec)
+
     def test_filter_syntax_warnings_by_module(self):
         module_re = r'test\.test_import\.data\.syntax_warnings\z'
         unload('test.test_import.data.syntax_warnings')
diff --git 
a/Misc/NEWS.d/next/Core_and_Builtins/2025-11-28-16-45-07.gh-issue-142029.JuXiKu.rst
 
b/Misc/NEWS.d/next/Core_and_Builtins/2025-11-28-16-45-07.gh-issue-142029.JuXiKu.rst
new file mode 100644
index 00000000000000..b4cd284804de98
--- /dev/null
+++ 
b/Misc/NEWS.d/next/Core_and_Builtins/2025-11-28-16-45-07.gh-issue-142029.JuXiKu.rst
@@ -0,0 +1,2 @@
+Raise :exc:`ValueError` instead of crashing when empty string is used as a name
+in ``_imp.create_builtin()``.
diff --git a/Python/import.c b/Python/import.c
index e91c95b40d94bf..4dd247fac27654 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -4420,6 +4420,12 @@ _imp_create_builtin(PyObject *module, PyObject *spec)
         return NULL;
     }
 
+    if (PyUnicode_GetLength(name) == 0) {
+        PyErr_Format(PyExc_ValueError, "name must not be empty");
+        Py_DECREF(name);
+        return NULL;
+    }
+
     PyObject *mod = create_builtin(tstate, name, spec, NULL);
     Py_DECREF(name);
     return mod;

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to