AviatorEvaluatorInstance构造方法自动调用loadModule方法:
// AviatorEvaluatorInstance.java 第 894-901 行
private void loadModule() {
try {
addModule(IoModule.class); // IoModule 被加载到 moduleCache
} catch (Exception e) {
System.err.println("Fail to load internal modules.");
System.exit(1);
}
}
调用enableSandboxMode时,通过 disableFeature(Feature.Module) 禁用了 require/load 函数,阻止脚本动态加载新模块。但该方法未调用 removeModule("io") 将已加载的 IoModule 从模块缓存中移除:
// AviatorEvaluatorInstance.java 第 470-480 行
public void enableSandboxMode() {
disableFeature(Feature.Module); // 移除了 require/load 函数
disableFeature(Feature.NewInstance);
disableFeature(Feature.InternalVars);
disableFeature(Feature.StaticMethods);
setFunctionMissing(null);
setOption(Options.MAX_LOOP_COUNT, 65535);
setOption(Options.ALLOWED_CLASS_SET, Collections.emptySet());
setOption(Options.ASSIGNABLE_ALLOWED_CLASS_SET, Collections.emptySet());
setOption(Options.EVAL_TIMEOUT_MS, 1000L);
// ← 缺少 removeModule("io")
}
AviatorEvaluatorInstance构造方法自动调用loadModule方法:
调用enableSandboxMode时,通过
disableFeature(Feature.Module)禁用了require/load函数,阻止脚本动态加载新模块。但该方法未调用removeModule("io")将已加载的 IoModule 从模块缓存中移除: