Browse Source

[Minor] Try to process images before text part heuristic

tags/2.6
Vsevolod Stakhov 4 years ago
parent
commit
c6822d66ed
3 changed files with 37 additions and 11 deletions
  1. 24
    10
      src/libmime/images.c
  2. 9
    0
      src/libmime/images.h
  3. 4
    1
      src/libmime/message.c

+ 24
- 10
src/libmime/images.c View File

@@ -43,7 +43,24 @@ static const guint8 jpg_sig_exif[] = {0xff, 0xe1};
static const guint8 gif_signature[] = {'G', 'I', 'F', '8'};
static const guint8 bmp_signature[] = {'B', 'M'};

static void process_image (struct rspamd_task *task, struct rspamd_mime_part *part);
static bool process_image (struct rspamd_task *task, struct rspamd_mime_part *part);


bool
rspamd_images_process_mime_part_maybe (struct rspamd_task *task,
struct rspamd_mime_part *part)
{
if (part->part_type == RSPAMD_MIME_PART_UNDEFINED) {
if (part->detected_type &&
strcmp (part->detected_type, "image") == 0 &&
part->parsed_data.len > 0) {

return process_image (task, part);
}
}

return false;
}

void
rspamd_images_process (struct rspamd_task *task)
@@ -52,14 +69,7 @@ rspamd_images_process (struct rspamd_task *task)
struct rspamd_mime_part *part;

PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, part) {
if (part->part_type == RSPAMD_MIME_PART_UNDEFINED) {
if (part->detected_type &&
strcmp (part->detected_type, "image") == 0 &&
part->parsed_data.len > 0) {

process_image (task, part);
}
}
rspamd_images_process_mime_part_maybe (task, part);
}

}
@@ -592,7 +602,7 @@ rspamd_maybe_process_image (rspamd_mempool_t *pool,
return img;
}

static void
static bool
process_image (struct rspamd_task *task, struct rspamd_mime_part *part)
{
struct rspamd_image *img;
@@ -612,7 +622,11 @@ process_image (struct rspamd_task *task, struct rspamd_mime_part *part)

part->part_type = RSPAMD_MIME_PART_IMAGE;
part->specific.img = img;

return true;
}

return false;
}

const gchar *

+ 9
- 0
src/libmime/images.h View File

@@ -39,6 +39,15 @@ struct rspamd_image {
*/
void rspamd_images_process (struct rspamd_task *task);

/**
* Process image if possible in a single mime part
* @param task
* @param part
* @return
*/
bool rspamd_images_process_mime_part_maybe (struct rspamd_task *task,
struct rspamd_mime_part *part);

/*
* Link embedded images to the HTML parts
*/

+ 4
- 1
src/libmime/message.c View File

@@ -1464,6 +1464,10 @@ rspamd_message_process (struct rspamd_task *task)
lua_settop (L, funcs_top);
}

/* Try to detect image before checking for text */
rspamd_images_process_mime_part_maybe (task, part);

/* Still no content detected, try text heuristic */
if (part->part_type == RSPAMD_MIME_PART_UNDEFINED) {
rspamd_message_process_text_part_maybe (task, part);
}
@@ -1601,7 +1605,6 @@ rspamd_message_process (struct rspamd_task *task)
}
}

rspamd_images_process (task);
rspamd_images_link (task);

rspamd_tokenize_meta_words (task);

Loading…
Cancel
Save