在调用具有多个参数的方法时,我遇到了 Shikashi 问题:

class MyTest

    def self.think message
    end

    def self.say person,message
    end
end

include Shikashi

privileges = Privileges.new
privileges.allow_const_read "MyTest"
privileges.object(MyTest).allow_all
privileges.instances_of(MyTest).allow_all

Sandbox.new.run(privileges, "MyTest.think('you')")

Sandbox.new.run(privileges, "MyTest.say('you', 'hi there')")

这个有效
Sandbox.new.run(privileges, "MyTest.think('you')")

在这里,我收到一个 ArgumentError:参数数量错误(1 对 2)
Sandbox.new.run(privileges, "MyTest.say('you', 'hi there')")

当我在沙箱之外调用它时,一切都很好。

怎么了?我正在使用 ruby​​-1.9.3-p194

最佳答案

更新:

该错误已在 evalhook 0.5.2 版中修复;升级到那个,一切都应该很好。

原始答案:

在所有版本的 evalhook(shikashi 用来评估代码的)中都有一个大于 0.3.1 的错误,其中方法只用第一个参数调用。例如:

Sandbox.new.run(privileges, "MyTest.think('you', 'hi there')")

工作得很好,忽略第二个参数。

不幸的是,依赖项的设置方式,您需要降级到 shikashi 0.3.1 才能使用 evalhook 0.3.1,但至少对我而言,shikashi 0.3.1 已损坏且无法安装。我认为你的选择是:
  • 不要使用shikashi,
  • 不要在沙箱中使用具有多个参数的方法,
  • 跟踪并修复 evalhook 中的错误,
  • 让开发人员修复错误,或
  • 看看你是否可以说服新版本的 shikashi 使用 evalhook 0.3.1。
  • 关于ruby - Shikashi : ArgumentError: wrong number of arguments with sandboxed code,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16228037/

    10-10 22:07