]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix R_BAD_CTE_7BIT rule
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 24 Apr 2017 16:06:55 +0000 (17:06 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 1 May 2017 13:03:04 +0000 (14:03 +0100)
Issue: #1590

rules/misc.lua
rules/regexp/headers.lua
src/lua/lua_mimepart.c

index 422edfcc31dc5cb6659adcdc5bdc28a718e4f94a..20505828bbf3ed87ae37a499fa0be1c69c244ed1 100644 (file)
@@ -590,3 +590,23 @@ rspamd_config.INFO_TO_INFO_LU = {
   description = 'info@ From/To address with List-Unsubscribe headers',
   score = 2.0
 }
+
+-- Detects bad content-transfer-encoding for text parts
+
+rspamd_config.R_BAD_CTE_7BIT = {
+  callback = function(task)
+    local tp = task:get_text_parts() or {}
+
+    for _,p in ipairs(tp) do
+      local cte = p:get_mimepart():get_cte() or ''
+      if cte ~= '8bit' and p:has_8bit_raw() then
+        return true,1.0,cte
+      end
+    end
+
+    return false
+  end,
+  score = 4.0,
+  description = 'Detects bad content-transfer-encoding for text parts',
+  group = 'header'
+}
\ No newline at end of file
index 0258ab42e9a6f690aec57aff0e2d8324ea6f5ca7..12a2b624982770a6a53aa9ce4c9dae16352c3bbd 100644 (file)
@@ -57,20 +57,6 @@ rspamd_config.MISSING_SUBJECT = {
   end
 }
 
--- Detects bad content-transfer-encoding for text parts
--- For text parts (text/plain and text/html mainly)
-local r_ctype_text = 'content_type_is_type(text)'
--- Content transfer encoding is 7bit
-local r_cte_7bit = 'compare_transfer_encoding(7bit)'
--- And body contains 8bit characters
-local r_body_8bit = '/[^\\x01-\\x7f]/Qr'
-reconf['R_BAD_CTE_7BIT'] = {
-  re = string.format('(%s) & (%s) & (%s)', r_ctype_text, r_cte_7bit, r_body_8bit),
-  score = 2.0,
-  description = 'Detects bad content-transfer-encoding for text parts',
-  group = 'header'
-}
-
 -- Detects missing To header
 reconf['MISSING_TO'] = {
   re = '!raw_header_exists(To)',
index ae79880b2c61d1aad65838dbff89f1779e1b0ea6..d831250445dd4c3c64f314ff2f9dc9f07799b30d 100644 (file)
@@ -47,18 +47,18 @@ end
 LUA_FUNCTION_DEF (textpart, is_utf);
 
 /***
- * @method text_part:is_8bit_raw()
+ * @method text_part:has_8bit_raw()
  * Return TRUE if a part has raw 8bit characters
  * @return {boolean} true if a part has raw 8bit characters
  */
-LUA_FUNCTION_DEF (textpart, is_8bit_raw);
+LUA_FUNCTION_DEF (textpart, has_8bit_raw);
 
 /***
- * @method text_part:is_8bit()
+ * @method text_part:has_8bit()
  * Return TRUE if a part has raw 8bit characters
  * @return {boolean} true if a part has encoded 8bit characters
  */
-LUA_FUNCTION_DEF (textpart, is_8bit);
+LUA_FUNCTION_DEF (textpart, has_8bit);
 
 /***
  * @method text_part:get_content([type])
@@ -146,8 +146,8 @@ LUA_FUNCTION_DEF (textpart, get_mimepart);
 
 static const struct luaL_reg textpartlib_m[] = {
        LUA_INTERFACE_DEF (textpart, is_utf),
-       LUA_INTERFACE_DEF (textpart, is_8bit_raw),
-       LUA_INTERFACE_DEF (textpart, is_8bit),
+       LUA_INTERFACE_DEF (textpart, has_8bit_raw),
+       LUA_INTERFACE_DEF (textpart, has_8bit),
        LUA_INTERFACE_DEF (textpart, get_content),
        LUA_INTERFACE_DEF (textpart, get_raw_content),
        LUA_INTERFACE_DEF (textpart, get_content_oneline),
@@ -395,7 +395,7 @@ lua_textpart_is_utf (lua_State * L)
 
 
 static gint
-lua_textpart_is_8bit_raw (lua_State * L)
+lua_textpart_has_8bit_raw (lua_State * L)
 {
        struct rspamd_mime_text_part *part = lua_check_textpart (L);
 
@@ -415,7 +415,7 @@ lua_textpart_is_8bit_raw (lua_State * L)
 }
 
 static gint
-lua_textpart_is_8bit (lua_State * L)
+lua_textpart_has_8bit (lua_State * L)
 {
        struct rspamd_mime_text_part *part = lua_check_textpart (L);