创建_ENV的深层副本并更改值而不更改原始文件

时间:2019-04-26 19:06:28

标签: lua sandbox

我正在研究一些Lua代码,可以在其中作为自定义环境调用沙箱函数。我需要创建_ENV的副本,在其中修改函数,并使用新环境运行一个函数。到目前为止,我有这个:

new_env = _ENV

function newIoOpen(f,m)
  print("Function is opening file "..f)
  return io.open(f,m)
end

new_env.io.open = newIoOpen

function testFunction()
  io.open("bar.txt","r") -- should print: "Function is opening file bar.txt"
end

io.open("foo.txt","r") -- should stay silent

setfenv(testFunction,new_env)
testFunction()

相反,常规的io.open调用显示“函数正在打开文件foo.txt”并再次调用自身。与函数的io.open相同。当我替换新环境的功能时,它将编辑旧环境。如何防止这种情况发生?

0 个答案:

没有答案