commit 221a576: [Fix] Multimap: Fix operating with userdata

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Feb 25 15:42:03 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-02-25 15:37:38 +0000
URL: https://github.com/rspamd/rspamd/commit/221a576077cb7ae2b11bb954230bef583d384fc4 (HEAD -> master)

[Fix] Multimap: Fix operating with userdata

---
 src/lua/lua_ip.c             |  3 +++
 src/plugins/lua/multimap.lua | 14 +++++++++-----
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/lua/lua_ip.c b/src/lua/lua_ip.c
index 800c9765c..5ee4a39b4 100644
--- a/src/lua/lua_ip.c
+++ b/src/lua/lua_ip.c
@@ -176,6 +176,9 @@ static const struct luaL_reg iplib_m[] = {
 	LUA_INTERFACE_DEF (ip, apply_mask),
 	LUA_INTERFACE_DEF (ip, copy),
 	LUA_INTERFACE_DEF (ip, is_local),
+	{"tostring", lua_ip_to_string},
+	{"totable", lua_ip_to_table},
+	{"tonumber", lua_ip_to_number},
 	{"__tostring", lua_ip_to_string},
 	{"__eq", lua_ip_equal},
 	{"__gc", lua_ip_destroy},
diff --git a/src/plugins/lua/multimap.lua b/src/plugins/lua/multimap.lua
index 8f1061e4f..9eda5aeec 100644
--- a/src/plugins/lua/multimap.lua
+++ b/src/plugins/lua/multimap.lua
@@ -404,14 +404,16 @@ local function multimap_callback(task, rule)
     if r['cdb'] then
       local srch = value
       if type(value) == 'userdata' then
-        srch = value:to_string()
+        if value.class == 'rspamd{ip}' then
+          srch = value:tostring()
+        end
       end
       ret = r['cdb']:lookup(srch)
     elseif r['redis_key'] then
       local srch = {value}
       local cmd = 'HGET'
-      if type(value) == 'userdata' then
-        srch = {value:to_string()}
+      if type(value) == 'userdata' and value.class == 'rspamd{ip}' then
+        srch = {value:tostring()}
         cmd = 'HMGET'
         local maxbits = 128
         local minbits = 32
@@ -420,7 +422,7 @@ local function multimap_callback(task, rule)
             minbits = 8
         end
         for i=maxbits,minbits,-1 do
-            local nip = value:apply_mask(i):to_string() .. "/" .. i
+            local nip = value:apply_mask(i):tostring() .. "/" .. i
             table.insert(srch, nip)
         end
       end
@@ -440,7 +442,9 @@ local function multimap_callback(task, rule)
       ret = r['radix']:get_key(value)
     elseif r['hash'] then
       if type(value) == 'userdata' then
-        value = value:to_string()
+        if value.class == 'rspamd{ip}' then
+          value = value:tostring()
+        end
       end
       ret = r['hash']:get_key(value)
     end


More information about the Commits mailing list