From d3a8365ba1607f1d25f152257413b5904f1df6cf Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Mon, 26 May 2025 16:42:19 -0600 Subject: [PATCH 1/3] Always set __builtins__ in _PyFunction_FromXIData(). --- Python/crossinterp_data_lookup.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Python/crossinterp_data_lookup.h b/Python/crossinterp_data_lookup.h index 88eb41da89ee40..b04906de37ad65 100644 --- a/Python/crossinterp_data_lookup.h +++ b/Python/crossinterp_data_lookup.h @@ -701,6 +701,13 @@ _PyFunction_FromXIData(_PyXIData_t *xidata) Py_DECREF(code); return NULL; } + PyThreadState *tstate = _PyThreadState_GET(); + if (PyDict_SetItemString(globals, "__builtins__", + tstate->interp->builtins) < 0) + { + Py_DECREF(globals); + return NULL; + } PyObject *func = PyFunction_New(code, globals); Py_DECREF(code); Py_DECREF(globals); From 6c8da8d399db58f02edd1f2f3a3c4e54d4ff53d2 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 27 May 2025 09:14:27 -0600 Subject: [PATCH 2/3] Add a missing decref. --- Python/crossinterp_data_lookup.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Python/crossinterp_data_lookup.h b/Python/crossinterp_data_lookup.h index b04906de37ad65..5db0010fe8663d 100644 --- a/Python/crossinterp_data_lookup.h +++ b/Python/crossinterp_data_lookup.h @@ -705,6 +705,7 @@ _PyFunction_FromXIData(_PyXIData_t *xidata) if (PyDict_SetItemString(globals, "__builtins__", tstate->interp->builtins) < 0) { + Py_DECREF(code); Py_DECREF(globals); return NULL; } From f254ec7fe2807bbfccc5051c893fc3be4b5fa353 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 27 May 2025 09:16:09 -0600 Subject: [PATCH 3/3] Use a static str for "__builtins__". --- Python/crossinterp_data_lookup.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Python/crossinterp_data_lookup.h b/Python/crossinterp_data_lookup.h index 5db0010fe8663d..b16f38b847fc66 100644 --- a/Python/crossinterp_data_lookup.h +++ b/Python/crossinterp_data_lookup.h @@ -702,8 +702,8 @@ _PyFunction_FromXIData(_PyXIData_t *xidata) return NULL; } PyThreadState *tstate = _PyThreadState_GET(); - if (PyDict_SetItemString(globals, "__builtins__", - tstate->interp->builtins) < 0) + if (PyDict_SetItem(globals, &_Py_ID(__builtins__), + tstate->interp->builtins) < 0) { Py_DECREF(code); Py_DECREF(globals);