mirror of
https://github.com/falcosecurity/falco.git
synced 2025-06-26 22:57:24 +00:00
Deep copy macro ASTs when expanding
So that we can individually tag expressions that originate from the same macro (see next commit).
This commit is contained in:
parent
3a56c1a0e4
commit
406f079621
@ -339,6 +339,14 @@ end
|
|||||||
|
|
||||||
--]]
|
--]]
|
||||||
function expand_macros(node, defs, changed)
|
function expand_macros(node, defs, changed)
|
||||||
|
|
||||||
|
function copy(obj)
|
||||||
|
if type(obj) ~= 'table' then return obj end
|
||||||
|
local res = {}
|
||||||
|
for k, v in pairs(obj) do res[copy(k)] = copy(v) end
|
||||||
|
return res
|
||||||
|
end
|
||||||
|
|
||||||
if (node.type == "Rule") then
|
if (node.type == "Rule") then
|
||||||
macros = expand_macros(node.filter, defs, changed)
|
macros = expand_macros(node.filter, defs, changed)
|
||||||
elseif node.type == "Filter" then
|
elseif node.type == "Filter" then
|
||||||
@ -346,7 +354,7 @@ function expand_macros(node, defs, changed)
|
|||||||
if (defs[node.value.value] == nil) then
|
if (defs[node.value.value] == nil) then
|
||||||
error("Undefined macro '".. node.value.value .. "' used in filter.")
|
error("Undefined macro '".. node.value.value .. "' used in filter.")
|
||||||
end
|
end
|
||||||
node.value = defs[node.value.value]
|
node.value = copy(defs[node.value.value])
|
||||||
changed = true
|
changed = true
|
||||||
return changed
|
return changed
|
||||||
end
|
end
|
||||||
@ -358,7 +366,7 @@ function expand_macros(node, defs, changed)
|
|||||||
if (defs[node.left.value] == nil) then
|
if (defs[node.left.value] == nil) then
|
||||||
error("Undefined macro '".. node.left.value .. "' used in filter.")
|
error("Undefined macro '".. node.left.value .. "' used in filter.")
|
||||||
end
|
end
|
||||||
node.left = defs[node.left.value]
|
node.left = copy(defs[node.left.value])
|
||||||
changed = true
|
changed = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -366,7 +374,7 @@ function expand_macros(node, defs, changed)
|
|||||||
if (defs[node.right.value] == nil) then
|
if (defs[node.right.value] == nil) then
|
||||||
error("Undefined macro ".. node.right.value .. "used in filter.")
|
error("Undefined macro ".. node.right.value .. "used in filter.")
|
||||||
end
|
end
|
||||||
node.right = defs[node.right.value]
|
node.right = copy(defs[node.right.value])
|
||||||
changed = true
|
changed = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -379,7 +387,7 @@ function expand_macros(node, defs, changed)
|
|||||||
if (defs[node.argument.value] == nil) then
|
if (defs[node.argument.value] == nil) then
|
||||||
error("Undefined macro ".. node.argument.value .. "used in filter.")
|
error("Undefined macro ".. node.argument.value .. "used in filter.")
|
||||||
end
|
end
|
||||||
node.argument = defs[node.argument.value]
|
node.argument = copy(defs[node.argument.value])
|
||||||
changed = true
|
changed = true
|
||||||
end
|
end
|
||||||
return expand_macros(node.argument, defs, changed)
|
return expand_macros(node.argument, defs, changed)
|
||||||
|
Loading…
Reference in New Issue
Block a user