diff options
-rw-r--r-- | src/libmime/images.c | 13 | ||||
-rw-r--r-- | src/libmime/images.h | 2 | ||||
-rw-r--r-- | src/plugins/fuzzy_check.c | 12 |
3 files changed, 19 insertions, 8 deletions
diff --git a/src/libmime/images.c b/src/libmime/images.c index 31b99f022..1f3c891cf 100644 --- a/src/libmime/images.c +++ b/src/libmime/images.c @@ -428,7 +428,7 @@ rspamd_image_save_hash (struct rspamd_task *task, struct rspamd_image *img) #endif -static void +void rspamd_image_normalize (struct rspamd_task *task, struct rspamd_image *img) { #ifdef USABLE_GD @@ -445,6 +445,10 @@ rspamd_image_normalize (struct rspamd_task *task, struct rspamd_image *img) return; } + if (img->data->len > task->cfg->max_pic_size) { + return; + } + if (rspamd_image_check_hash (task, img)) { return; } @@ -595,13 +599,6 @@ process_image (struct rspamd_task *task, struct rspamd_mime_part *part) img->parent = part; - if (img->data->len <= task->cfg->max_pic_size) { - rspamd_image_normalize (task, img); - } - else { - msg_info_task ("skip normalization for image %s: too large: %z", - img->filename, img->data->len); - } part->flags |= RSPAMD_MIME_PART_IMAGE; part->specific.img = img; diff --git a/src/libmime/images.h b/src/libmime/images.h index e442eaa40..55aa6873f 100644 --- a/src/libmime/images.h +++ b/src/libmime/images.h @@ -40,4 +40,6 @@ void rspamd_images_process (struct rspamd_task *task); */ const gchar * rspamd_image_type_str (enum rspamd_image_type type); +void rspamd_image_normalize (struct rspamd_task *task, struct rspamd_image *img); + #endif /* IMAGES_H_ */ diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c index 37eeded4d..92930b948 100644 --- a/src/plugins/fuzzy_check.c +++ b/src/plugins/fuzzy_check.c @@ -85,6 +85,7 @@ struct fuzzy_rule { double max_score; gboolean read_only; gboolean skip_unknown; + gboolean fuzzy_images; gint learn_condition_cb; }; @@ -481,6 +482,10 @@ fuzzy_parse_rule (struct rspamd_config *cfg, const ucl_object_t *obj, rule->skip_unknown = ucl_obj_toboolean (value); } + if ((value = ucl_object_lookup (obj, "fuzzy_images")) != NULL) { + rule->fuzzy_images = ucl_obj_toboolean (value); + } + if ((value = ucl_object_lookup (obj, "algorithm")) != NULL) { rule->algorithm_str = ucl_object_tostring (value); @@ -2305,6 +2310,13 @@ fuzzy_generate_commands (struct rspamd_task *task, struct fuzzy_rule *rule, g_ptr_array_add (res, io); } + if (rule->fuzzy_images) { + /* Try to normalize image */ + if (!image->is_normalized) { + rspamd_image_normalize (task, image); + } + } + if (image->is_normalized) { io = fuzzy_cmd_from_image_part (rule, c, flag, value, task->task_pool, |