commit a89cf52: [Fix] Disable text detection heuristics for encrypted parts

Vsevolod Stakhov vsevolod at highsecure.ru
Tue Apr 28 14:42:07 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-04-28 15:38:47 +0100
URL: https://github.com/rspamd/rspamd/commit/a89cf52149a0790378ae21440406e6ea52780b58 (HEAD -> master)

[Fix] Disable text detection heuristics for encrypted parts
Issue: #3349

---
 lualib/lua_magic/heuristics.lua | 13 +++++++++++++
 src/libmime/content_type.c      |  5 +++++
 src/libmime/content_type.h      |  1 +
 3 files changed, 19 insertions(+)

diff --git a/lualib/lua_magic/heuristics.lua b/lualib/lua_magic/heuristics.lua
index d9d408170..8aeafae90 100644
--- a/lualib/lua_magic/heuristics.lua
+++ b/lualib/lua_magic/heuristics.lua
@@ -377,6 +377,19 @@ exports.text_part_heuristic = function(part, log_obj)
     return true
   end
 
+  local parent = part:get_parent()
+
+  if parent then
+    local parent_type,parent_subtype = parent:get_type()
+
+    if parent_type == 'multipart' and parent_subtype == 'encrypted' then
+      -- Skip text heuristics for encrypted parts
+      lua_util.debugm(N, log_obj, "text part check: parent is encrypted, not a text part")
+
+      return false
+    end
+  end
+
   local content = part:get_content()
   local clen = #content
   local is_text
diff --git a/src/libmime/content_type.c b/src/libmime/content_type.c
index 3de9bdb12..1540e6b23 100644
--- a/src/libmime/content_type.c
+++ b/src/libmime/content_type.c
@@ -709,6 +709,11 @@ rspamd_content_type_parse (const gchar *in,
 
 		if (rspamd_ftok_casecmp (&res->type, &srch) == 0) {
 			res->flags |= RSPAMD_CONTENT_TYPE_MULTIPART;
+
+			RSPAMD_FTOK_ASSIGN (&srch, "encrypted");
+			if (rspamd_ftok_casecmp (&res->subtype, &srch) == 0) {
+				res->flags |= RSPAMD_CONTENT_TYPE_ENCRYPTED;
+			}
 		}
 		else {
 			RSPAMD_FTOK_ASSIGN (&srch, "text");
diff --git a/src/libmime/content_type.h b/src/libmime/content_type.h
index 49bba4269..3991e6785 100644
--- a/src/libmime/content_type.h
+++ b/src/libmime/content_type.h
@@ -32,6 +32,7 @@ enum rspamd_content_type_flags {
 	RSPAMD_CONTENT_TYPE_MESSAGE = 1 << 3,
 	RSPAMD_CONTENT_TYPE_DSN = 1 << 4,
 	RSPAMD_CONTENT_TYPE_MISSING = 1 << 5,
+	RSPAMD_CONTENT_TYPE_ENCRYPTED = 1 << 1,
 };
 
 enum rspamd_content_param_flags {


More information about the Commits mailing list