为什么递归函数在节点的vm2沙箱模块中超时?

时间:2018-08-31 21:38:48

标签: javascript sandbox

我正在构建一个Web应用程序,允许用户相互竞争以解决编码挑战。我一直遇到的问题是,当用户针对诸如“ fibonacci”之类的琐碎问题提交任何种类的递归代码时,该代码在沙箱中都会超时。因此,用户无法使用递归来解决不太好的问题。

这是我目前如何使用vm2来运行用户代码以及附带的测试的示例。

[8/31/2018 9:35:58 PM] A ScriptHost error has occurred
[8/31/2018 9:35:58 PM] System.Private.CoreLib: No parameterless constructor defined for this object.
[8/31/2018 9:35:58 PM] Stopping Host

我不明白为什么普通的javascript可以正常执行,但是当在“ vm.run”中调用递归函数时,它最终会超时。

我的猜测是调用堆栈可能无法正常运行,因为我打算在“运行”功能中使用它?

作为参考,此特殊挑战的JSON数据如下所示:

const {VM} = require('vm2');

const vm = new VM({
  timeout: 3000,
  sandbox: {}
});

let execute = (code, tests) => {
  return new Promise(resolve => resolve(vm.run(`${code} ${tests}`)))
};

我可能没有完全掌握它,这很简单,但这是编程。

任何帮助或见识将不胜感激,谢谢!

0 个答案:

没有答案