aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer.c
diff options
context:
space:
mode:
Diffstat (limited to 'composer/e-msg-composer.c')
-rw-r--r--composer/e-msg-composer.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index c41c4019b3..0eaf3caa6b 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -128,6 +128,8 @@ static void handle_multipart_signed (EMsgComposer *composer,
static void e_msg_composer_alert_sink_init (EAlertSinkInterface *interface);
+gboolean check_blacklisted_file (gchar *filename);
+
G_DEFINE_TYPE_WITH_CODE (
EMsgComposer,
e_msg_composer,
@@ -4003,6 +4005,28 @@ merge_always_cc_and_bcc (EComposerHeaderTable *table,
e_destination_freev (addrv);
}
+static const gchar *blacklisted_files [] = {".", "etc", ".."};
+
+gboolean check_blacklisted_file (gchar *filename)
+{
+ gboolean blacklisted = FALSE;
+ gint i,j,len;
+ gchar **filename_part;
+
+ filename_part = g_strsplit (filename, G_DIR_SEPARATOR_S, -1);
+ len = g_strv_length(filename_part);
+ for(i = 0; !blacklisted && i < G_N_ELEMENTS(blacklisted_files); i++)
+ {
+ for (j = 0; !blacklisted && j < len;j++)
+ if (g_str_has_prefix (filename_part[j], blacklisted_files[i]))
+ blacklisted = TRUE;
+ }
+
+ g_strfreev(filename_part);
+
+ return blacklisted;
+}
+
static void
handle_mailto (EMsgComposer *composer,
const gchar *mailto)
@@ -4094,8 +4118,14 @@ handle_mailto (EMsgComposer *composer,
} else if (!g_ascii_strcasecmp (header, "attach") ||
!g_ascii_strcasecmp (header, "attachment")) {
EAttachment *attachment;
+ gboolean check = FALSE;
camel_url_decode (content);
+ check = check_blacklisted_file(content);
+ if(check)
+ e_alert_submit (
+ E_ALERT_SINK (composer),
+ "mail:blacklisted-file", content, NULL);
if (g_ascii_strncasecmp (content, "file:", 5) == 0)
attachment = e_attachment_new_for_uri (content);
else