fix: correct async import hook that disables the code-interpreter module blocklist (#27245)
The middleware code-interpreter path defines `restricted_import` as `async def` and assigns it to `builtins.__import__`, which Python's import machinery calls synchronously. Calling an async function returns a coroutine without running its body, so the blocklist check never executes and `_real_import` is never called. When `CODE_INTERPRETER_BLOCKED_MODULES` is set, blocked modules are therefore not blocked, and every subsequent import inside the interpreter binds a dangling coroutine instead of the module, breaking legitimate imports as well. Define the hook as a regular `def`, matching the working implementation in `tools/builtin.py`. A blocked top-level import now raises `ImportError`, and all other imports pass through to the real importer.
This commit is contained in:
1 parent
66bf96c62d
commit
dc4b828852
1 file changed
+1
-1
@@ -5179,7 +5179,7 @@ async def streaming_chat_response_handler(response, ctx):
|
|||||||
BLOCKED_MODULES = {CODE_INTERPRETER_BLOCKED_MODULES}
|
BLOCKED_MODULES = {CODE_INTERPRETER_BLOCKED_MODULES}
|
||||||
|
|
||||||
_real_import = builtins.__import__
|
_real_import = builtins.__import__
|
||||||
async def restricted_import(name, globals=None, locals=None, fromlist=(), level=0):
|
def restricted_import(name, globals=None, locals=None, fromlist=(), level=0):
|
||||||
if name.split('.')[0] in BLOCKED_MODULES:
|
if name.split('.')[0] in BLOCKED_MODULES:
|
||||||
importer_name = globals.get('__name__') if globals else None
|
importer_name = globals.get('__name__') if globals else None
|
||||||
if importer_name == '__main__':
|
if importer_name == '__main__':
|
||||||
|
|||||||
Reference in new issue
Block a user