From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 27 May 2025 16:07:44 +0000 (+0200) Subject: [3.14] gh-132775: Always Set __builtins__ In _PyFunction_FromXIData() (gh-134794) X-Git-Tag: v3.14.0b3~158 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6493395f4b69c561db14fdb5c10a819fda52138d;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-132775: Always Set __builtins__ In _PyFunction_FromXIData() (gh-134794) This is a small follow-up to gh-133481. There's a corner case in the behavior of PyImport_ImportModuleAttrString(), where it expects __builtins__ to be set if __globals__ is set. (cherry picked from commit 9b5e80000, AKA gh-134758) Co-authored-by: Eric Snow --- diff --git a/Python/crossinterp_data_lookup.h b/Python/crossinterp_data_lookup.h index 88eb41da89ee..b16f38b847fc 100644 --- a/Python/crossinterp_data_lookup.h +++ b/Python/crossinterp_data_lookup.h @@ -701,6 +701,14 @@ _PyFunction_FromXIData(_PyXIData_t *xidata) Py_DECREF(code); return NULL; } + PyThreadState *tstate = _PyThreadState_GET(); + if (PyDict_SetItem(globals, &_Py_ID(__builtins__), + tstate->interp->builtins) < 0) + { + Py_DECREF(code); + Py_DECREF(globals); + return NULL; + } PyObject *func = PyFunction_New(code, globals); Py_DECREF(code); Py_DECREF(globals);