Skip to content

Commit 2bf3a4b

Browse files
Fix type handling in _PyEval_EnsureBuiltins().
1 parent 77fbd1f commit 2bf3a4b

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

Python/ceval.c

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2784,8 +2784,17 @@ _PyEval_EnsureBuiltins(PyThreadState *tstate, PyObject *globals, int usemod,
27842784
PyObject **p_builtins)
27852785
{
27862786
PyObject *builtins = NULL;
2787-
if (PyMapping_GetOptionalItem(globals, &_Py_ID(__builtins__), &builtins) < 0) {
2788-
return -1;
2787+
if (PyDict_Check(globals)) {
2788+
if (PyDict_GetItemRef(globals, &_Py_ID(__builtins__), &builtins) < 0) {
2789+
return -1;
2790+
}
2791+
}
2792+
else {
2793+
if (PyMapping_GetOptionalItem(
2794+
globals, &_Py_ID(__builtins__), &builtins) < 0)
2795+
{
2796+
return -1;
2797+
}
27892798
}
27902799
if (builtins == NULL) {
27912800
if (usemod) {
@@ -2803,9 +2812,17 @@ _PyEval_EnsureBuiltins(PyThreadState *tstate, PyObject *globals, int usemod,
28032812
}
28042813
Py_INCREF(builtins);
28052814
}
2806-
if (PyDict_SetItem(globals, &_Py_ID(__builtins__), builtins) < 0) {
2807-
Py_DECREF(builtins);
2808-
return -1;
2815+
if (PyDict_Check(globals)) {
2816+
if (PyDict_SetItem(globals, &_Py_ID(__builtins__), builtins) < 0) {
2817+
Py_DECREF(builtins);
2818+
return -1;
2819+
}
2820+
}
2821+
else {
2822+
if (PyObject_SetItem(globals, &_Py_ID(__builtins__), builtins) < 0) {
2823+
Py_DECREF(builtins);
2824+
return -1;
2825+
}
28092826
}
28102827
}
28112828
if (p_builtins != NULL) {

0 commit comments

Comments
 (0)