輸出爲下面的腳本是:如何使用Lua中的數字鍵值引用表?
AD[1] = [variable not found]
AD['2'] = bar
如何修改功能getfield命令返回一個值v對於這兩種情況?
function getfield (f)
local v = _G
for w in string.gfind(f, "[%w_]+") do
v = v[w]
end
return v
end
AD = {[1] = 'foo', ['2'] = 'bar'}
data = {"AD[1]","AD['2']"}
for i,line in ipairs(data) do
s = getfield(line)
if s then
print(line .. " = " .. s)
else
print(line .. " = [variable not found]")
end
end
UPDATE: 我90%肯定,這是要爲我工作:
function getfield (f)
local v = _G
for w in string.gfind(f, "['%w_]+") do
if (string.find(w,"['%a_]")==nil) then
w = loadstring('return '..w)()
else
w = string.gsub(w, "'", "")
end
v=v[w]
end
return v
end
什麼會使它失敗? – shaun5 2012-02-18 03:52:46
請參閱附錄「我認爲那種脆弱性......」 – 2012-02-18 04:08:40
我無法想出讓它失敗的場景。我想:AD = {[1] ='foo',['1'] ='foobar',['2'] ='bar'}會這樣做,但仍然有效。 – shaun5 2012-02-18 04:12:28