如何将表格格式的字符串转换为表格而不使用load()或loadstring()?

4
另一个问题(Lua中字符串转换为表格)问如何将格式化为表格的字符串转换为表格,所给出的答案是使用loadstringload将字符串转换为代码块,然后执行它。
我也有一个程序,它使用http.request下载一个格式化为lua表格的文件,就像其他问题一样:
yourTable = http.request("http://www.somesite.com/table.txt")
print(yourTable)

--yourTable is a string that is formatted like a lua table, but not a table:
a={
    b = {
      c = 1,
      d = {
        e = {
        },
      },
    },
}

functionThatExpectsATable(yourTable) --throws error because yourTable is a string

虽然我可以使用loadloadstring来获取所需的表格,但这是一个潜在的安全漏洞,因为我的程序允许用户输入任何URL来加载他们的表格数据。如果他们指向了Lua代码而不是Lua格式化的表格,那么该代码将被执行。

如何将“表格式化字符串”转换为表格而不执行它?


除非你自己编写解析器,否则我认为你做不到。最好的方法是在沙盒中运行脚本,然后验证结果不包含任何你不想要的内容(如函数)。 - Odoth
有一个 https://bitbucket.org/alexames/lon,不过我从未尝试过。 - dualed
1个回答

4

谢谢。我知道“某人”一定有安全地执行此操作的需求。 - Suchipi
请注意,在字符串内部连续两个连字符会导致 pretty.read 失败:pretty.read('-- table of players\n {{nickname="--=Eagle=--", score=0}}') - Egor Skriptunoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接