]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Ical: Do not extract urls from all flags using merely specific ones
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 20 Apr 2021 14:26:46 +0000 (15:26 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 20 Apr 2021 14:26:46 +0000 (15:26 +0100)
lualib/lua_content/ical.lua

index 5ee37a49107ee14610c9e61552c53bb293364aac..ef8da5068724f368fb47e5e0208fbfe2a988ffd3 100644 (file)
@@ -42,19 +42,34 @@ local function extract_text_data(specific)
   return table.concat(tbl, '\n')
 end
 
+
+-- Keys that can have visible urls
+local url_keys = lua_util.list_to_hash{
+  'description',
+  'location',
+  'summary',
+  'organizer',
+  'organiser',
+  'attendee',
+  'url'
+}
+
 local function process_ical(input, mpart, task)
   local control={n='\n', r=''}
   local rspamd_url = require "rspamd_url"
   local escaper = l.Ct((gen_grammar() / function(key, value)
     value = value:gsub("\\(.)", control)
-    key = key:lower()
-    local local_urls = rspamd_url.all(task:get_mempool(), value)
-
-    if local_urls and #local_urls > 0 then
-      for _,u in ipairs(local_urls) do
-        lua_util.debugm(N, task, 'ical: found URL in ical %s',
-            tostring(u))
-        task:inject_url(u, mpart)
+    key = key:lower():match('^([^;]+)')
+
+    if key and url_keys[key] then
+      local local_urls = rspamd_url.all(task:get_mempool(), value)
+
+      if local_urls and #local_urls > 0 then
+        for _,u in ipairs(local_urls) do
+          lua_util.debugm(N, task, 'ical: found URL in ical key "%s": %s',
+                  key, tostring(u))
+          task:inject_url(u, mpart)
+        end
       end
     end
     lua_util.debugm(N, task, 'ical: ical key %s = "%s"',