summaryrefslogtreecommitdiffstats
path: root/main/awall/check-against-definition-type-mismatch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/awall/check-against-definition-type-mismatch.patch')
-rw-r--r--main/awall/check-against-definition-type-mismatch.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/main/awall/check-against-definition-type-mismatch.patch b/main/awall/check-against-definition-type-mismatch.patch
new file mode 100644
index 000000000..4ad92cf75
--- /dev/null
+++ b/main/awall/check-against-definition-type-mismatch.patch
@@ -0,0 +1,80 @@
+From 041b4b69c4e36a24342cfc3ce2e1a7a7307ad492 Mon Sep 17 00:00:00 2001
+From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
+Date: Tue, 1 Jul 2014 11:27:52 +0300
+Subject: check against definition type mismatch (objects vs. arrays)
+
+fixes #3098
+
+diff --git a/awall/policy.lua b/awall/policy.lua
+index efd52e0..093390d 100644
+--- a/awall/policy.lua
++++ b/awall/policy.lua
+@@ -11,7 +11,9 @@ local raise = require('awall.uerror').raise
+
+ local util = require('awall.util')
+ local contains = util.contains
++local keys = util.keys
+ local listpairs = util.listpairs
++local map = util.map
+
+
+ local json = require('cjson')
+@@ -29,7 +31,7 @@ end
+ function PolicyConfig:expand()
+
+ local function expand(value)
+- if type(value) == 'table' then return util.map(value, expand) end
++ if type(value) == 'table' then return map(value, expand) end
+
+ local visited = {}
+ local pattern = '%$(%a[%w_]*)'
+@@ -212,22 +214,37 @@ function PolicySet:load()
+ input[cls] = objs
+ for k, v in pairs(objs) do source[cls][k] = name end
+
+- elseif objs[1] then
+- local last = #input[cls]
+- util.extend(input[cls], objs)
+- for i = 1,#objs do source[cls][last + i] = name end
+-
+ else
+- for k, v in pairs(objs) do
+- input[cls][k] = v
+- source[cls][k] = name
++ local fk = next(input[cls])
++ map(
++ keys(objs),
++ function(k)
++ if type(k) ~= type(fk) then
++ raise(
++ 'Type mismatch in '..cls..' definitions ('..
++ name..', '..source[cls][fk]..')'
++ )
++ end
++ end
++ )
++
++ if objs[1] then
++ local last = #input[cls]
++ util.extend(input[cls], objs)
++ for i = 1,#objs do source[cls][last + i] = name end
++
++ else
++ for k, v in pairs(objs) do
++ input[cls][k] = v
++ source[cls][k] = name
++ end
+ end
+ end
+ end
+ end
+ end
+
+- return PolicyConfig(input, source, util.keys(imported))
++ return PolicyConfig(input, source, keys(imported))
+ end
+
+ return PolicySet
+--
+cgit v0.10.1
+