aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libmime/images.c13
-rw-r--r--src/libmime/images.h2
-rw-r--r--src/plugins/fuzzy_check.c12
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,