8000 bpo-43551: Fix PyImport_Import() for subinterpreters (GH-24929) · python/cpython@88d9983 · GitHub
[go: up one dir, main page]

Skip to content

Commit 88d9983

Browse files
author
junyixie
authored
bpo-43551: Fix PyImport_Import() for subinterpreters (GH-24929)
Avoid static variables.
1 parent 56f031e commit 88d9983

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

Python/import.c

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,26 +1744,29 @@ PyImport_ReloadModule(PyObject *m)
17441744
PyObject *
17451745
PyImport_Import(PyObject *module_name)
17461746
{
1747+
_Py_IDENTIFIER(__import__);
1748+
_Py_IDENTIFIER(__builtins__);
1749+
17471750
PyThreadState *tstate = _PyThreadState_GET();
1748-
static PyObject *silly_list = NULL;
1749-
static PyObject *builtins_str = NULL;
1750-
static PyObject *import_str = NULL;
17511751
PyObject *globals = NULL;
17521752
PyObject *import = NULL;
17531753
PyObject *builtins = NULL;
17541754
PyObject *r = NULL;
17551755

17561756
/* Initialize constant string objects */
1757-
if (silly_list == NULL) {
1758-
import_str = PyUnicode_InternFromString("__import__");
1759-
if (import_str == NULL)
1760-
return NULL;
1761-
builtins_str = PyUnicode_InternFromString("__builtins__");
1762-
if (builtins_str == NULL)
1763-
return NULL;
1764-
silly_list = PyList_New(0);
1765-
if (silly_list == NULL)
1766-
return NULL;
1757+
PyObject *import_str = _PyUnicode_FromId(&PyId___import__); // borrowed ref
1758+
if (import_str == NULL) {
1759+
return NULL;
1760+
}
1761+
1762+
PyObject *builtins_str = _PyUnicode_FromId(&PyId___builtins__); // borrowed ref
1763+
if (builtins_str == NULL) {
1764+
return NULL;
1765+
}
1766+
1767+
PyObject *from_list = PyList_New(0);
1768+
if (from_list == NULL) {
1769+
goto err;
17671770
}
17681771

17691772
/* Get the builtins from current globals */
@@ -1778,8 +1781,9 @@ PyImport_Import(PyObject *module_name)
17781781
/* No globals -- use standard builtins, and fake globals */
17791782
builtins = PyImport_ImportModuleLevel("builtins",
17801783
NULL, NULL, NULL, 0);
1781-
if (builtins == NULL)
1782-
return NULL;
1784+
if (builtins == NULL) {
1785+
goto err;
1786+
}
17831787
globals = Py_BuildValue("{OO}", builtins_str, builtins);
17841788
if (globals == NULL)
17851789
goto err;
@@ -1801,7 +1805,7 @@ PyImport_Import(PyObject *module_name)
18011805
Always use absolute import here.
18021806
Calling for side-effect of import. */
18031807
r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1804-
globals, silly_list, 0, NULL);
1808+
globals, from_list, 0, NULL);
18051809
if (r == NULL)
18061810
goto err;
18071811
Py_DECREF(r);
@@ -1815,6 +1819,7 @@ PyImport_Import(PyObject *module_name)
18151819
Py_XDECREF(globals);
18161820
Py_XDECREF(builtins);
18171821
Py_XDECREF(import);
1822+
Py_XDECREF(from_list);
18181823

18191824
return r;
18201825
}

0 commit comments

Comments
 (0)
0