fix: 修复沙箱在无实例调用时的属性错误
- _execute_code_safely: 用getattr安全访问self属性 - _execute_code_safely: 导入traceback为_traceback避免命名冲突 - _sandbox_set_limits: 改用AICLI类方法引用
This commit is contained in:
1 parent
48f5765c1f
commit
6e14ee12a3
1 file changed
+5
-3
@@ -2066,6 +2066,7 @@ class AICLI:
|
|||||||
"""
|
"""
|
||||||
import subprocess
|
import subprocess
|
||||||
import json as _json
|
import json as _json
|
||||||
|
import traceback as _traceback
|
||||||
|
|
||||||
# 安全检查
|
# 安全检查
|
||||||
safe, violations = _sandbox_checker.check(code)
|
safe, violations = _sandbox_checker.check(code)
|
||||||
@@ -2078,7 +2079,8 @@ class AICLI:
|
|||||||
}
|
}
|
||||||
|
|
||||||
vars_json = _json.dumps(variables or {}, ensure_ascii=False, default=str)
|
vars_json = _json.dumps(variables or {}, ensure_ascii=False, default=str)
|
||||||
whitelist_json = _json.dumps(self.code_execution_whitelist or _SAFE_WHITELIST)
|
wl = getattr(self, 'code_execution_whitelist', None) or _SAFE_WHITELIST
|
||||||
|
whitelist_json = _json.dumps(wl)
|
||||||
script = _make_sandbox_worker(code, vars_json, whitelist_json, _sandbox_work_dir)
|
script = _make_sandbox_worker(code, vars_json, whitelist_json, _sandbox_work_dir)
|
||||||
|
|
||||||
safe_env = {
|
safe_env = {
|
||||||
@@ -2099,7 +2101,7 @@ class AICLI:
|
|||||||
[sys.executable, '-c', script],
|
[sys.executable, '-c', script],
|
||||||
capture_output=True, timeout=timeout,
|
capture_output=True, timeout=timeout,
|
||||||
cwd=_sandbox_work_dir, env=safe_env,
|
cwd=_sandbox_work_dir, env=safe_env,
|
||||||
preexec_fn=self._sandbox_set_limits if _HAS_RESOURCE else None,
|
preexec_fn=AICLI._sandbox_set_limits if _HAS_RESOURCE else None,
|
||||||
)
|
)
|
||||||
elapsed = time.time() - start_time
|
elapsed = time.time() - start_time
|
||||||
stdout = proc.stdout.decode('utf-8', errors='replace')[:1000000]
|
stdout = proc.stdout.decode('utf-8', errors='replace')[:1000000]
|
||||||
@@ -2134,7 +2136,7 @@ class AICLI:
|
|||||||
return {
|
return {
|
||||||
'success': False,
|
'success': False,
|
||||||
'result': f'代码执行异常: {str(e)}',
|
'result': f'代码执行异常: {str(e)}',
|
||||||
'stdout': '', 'stderr': traceback.format_exc(),
|
'stdout': '', 'stderr': _traceback.format_exc(),
|
||||||
'execution_time': time.time() - start_time, 'memory_usage': 0
|
'execution_time': time.time() - start_time, 'memory_usage': 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user