mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Issue #14385: Support other types than dict for __builtins__
It is now possible to use a custom type for the __builtins__ namespace, instead of a dict. It can be used for sandboxing for example. Raise also a NameError instead of ImportError if __build_class__ name if not found in __builtins__.
This commit is contained in:
parent
05fac022ec
commit
b0b224233e
4 changed files with 138 additions and 56 deletions
|
|
@ -614,10 +614,8 @@ PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals,
|
|||
if (builtins) {
|
||||
if (PyModule_Check(builtins)) {
|
||||
builtins = PyModule_GetDict(builtins);
|
||||
assert(!builtins || PyDict_Check(builtins));
|
||||
assert(builtins != NULL);
|
||||
}
|
||||
else if (!PyDict_Check(builtins))
|
||||
builtins = NULL;
|
||||
}
|
||||
if (builtins == NULL) {
|
||||
/* No builtins! Make up a minimal one
|
||||
|
|
@ -636,7 +634,7 @@ PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals,
|
|||
/* If we share the globals, we share the builtins.
|
||||
Save a lookup and a call. */
|
||||
builtins = back->f_builtins;
|
||||
assert(builtins != NULL && PyDict_Check(builtins));
|
||||
assert(builtins != NULL);
|
||||
Py_INCREF(builtins);
|
||||
}
|
||||
if (code->co_zombieframe != NULL) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue