Browse Source

[Minor] Further fixes for MIXED_CHARSET rule

tags/2.6
Vsevolod Stakhov 3 years ago
parent
commit
27ad207da6
1 changed files with 27 additions and 10 deletions
  1. 27
    10
      src/plugins/chartable.c

+ 27
- 10
src/plugins/chartable.c View File

@@ -585,7 +585,7 @@ rspamd_chartable_process_word_ascii (struct rspamd_task *task,
return badness;
}

static void
static gboolean
rspamd_chartable_process_part (struct rspamd_task *task,
struct rspamd_mime_text_part *part,
struct chartable_ctx *chartable_module_ctx,
@@ -597,7 +597,7 @@ rspamd_chartable_process_part (struct rspamd_task *task,

if (part == NULL || part->utf_words == NULL ||
part->utf_words->len == 0) {
return;
return FALSE;
}

for (i = 0; i < part->utf_words->len; i++) {
@@ -625,15 +625,17 @@ rspamd_chartable_process_part (struct rspamd_task *task,

cur_score /= (gdouble)part->nwords;

if (cur_score > 2.0) {
cur_score = 2.0;
if (cur_score > 1.0) {
cur_score = 1.0;
}

if (cur_score > chartable_module_ctx->threshold) {
rspamd_task_insert_result (task, chartable_module_ctx->symbol,
cur_score, NULL);
return TRUE;
}

return FALSE;
}

static void
@@ -645,8 +647,9 @@ chartable_symbol_callback (struct rspamd_task *task,
struct rspamd_mime_text_part *part;
struct chartable_ctx *chartable_module_ctx = chartable_get_context (task->cfg);
const gchar *language = NULL;
gboolean ignore_diacritics = FALSE;
gboolean ignore_diacritics = FALSE, seen_violated_part = FALSE;

/* Check if we have parts with diacritic symbols language */
PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, text_parts), i, part) {
if (part->languages && part->languages->len > 0) {
struct rspamd_lang_detector_res *lang =
@@ -660,8 +663,15 @@ chartable_symbol_callback (struct rspamd_task *task,
}
}

rspamd_chartable_process_part (task, part, chartable_module_ctx,
ignore_diacritics);
if (rspamd_chartable_process_part (task, part, chartable_module_ctx,
ignore_diacritics)) {
seen_violated_part = TRUE;
}
}

if (MESSAGE_FIELD (task, text_parts)->len == 0) {
/* No text parts, assume that we should ignore diacritics checks for metatokens */
ignore_diacritics = TRUE;
}

if (task->meta_words != NULL) {
@@ -677,11 +687,18 @@ chartable_symbol_callback (struct rspamd_task *task,

cur_score /= (gdouble)arlen;

if (cur_score > 2.0) {
cur_score = 2.0;
if (cur_score > 1.0) {
cur_score = 1.0;
}

if (cur_score > chartable_module_ctx->threshold) {
if (!seen_violated_part) {
/* Further penalise */
if (cur_score > 0.25) {
cur_score = 0.25;
}
}

rspamd_task_insert_result (task, chartable_module_ctx->symbol,
cur_score, "subject");


Loading…
Cancel
Save