-
- --- before_compose.php 2018-03-15 14:46:42.000000000 +0200
- +++ after_compose.php 2018-03-15 14:46:38.000000000 +0200
- @@ -147,6 +147,62 @@
-
- /* --------------------- Specific Functions ------------------------------ */
-
- +/*
- +Validate the user input 'attachments'.
- +If the input is ok, don't do anything.
- +If the attachment's file name is in an unexpected format, empty the attachments.
- +*/
- +function validateAttachments() {
- +
- + global $username, $attachment_dir, $attachments;
- +
- + // no attachments - nothing to validate
- + if (empty($attachments))
- + {
- + return;
- + }
- +
- + // get the Messages array
- + $attach_arr = unserialize($attachments);
- +
- + if (empty($attach_arr) || !is_array($attach_arr))
- + {
- + return;
- + }
- +
- + $hashed_attachment_dir = realpath(getHashedDir($username, $attachment_dir));
- +
- + /*
- + For each attachment (of type Message), verify:
- + 1. That after calling realpath(), we are in the attachment directory.
- + 2. That the file name is 32 characters long (a fixed length used for attachments).
- + 3. That the file has no extension.
- +
- + Notes: The attachment file name is a random 32-long string.
- + The attachments directory contains other types of files as well,
- + but they either have an exention or are not 32-characters long.
- + */
- + foreach ($attach_arr as $attach_msg_obj)
- + {
- + $received_file_name = $attach_msg_obj->att_local_name;
- + $full_path = realpath($hashed_attachment_dir . '/' . $received_file_name);
- +
- + $path_parts = pathinfo($full_path);
- + $file_name = $path_parts['basename'];
- +
- + if ((substr($full_path, 0, strlen($hashed_attachment_dir)) != $hashed_attachment_dir) or
- + (strlen($file_name) != 32) or
- + ($path_parts['extension'] != ""))
- + {
- + $attachments = '';
- + return;
- + }
- + }
- +
- + return;
- +}
- +
- +
- function replyAllString($header) {
- global $include_self_reply_all, $username, $data_dir;
- $excl_ar = array();
- @@ -287,6 +343,8 @@
- }
- /* ----------------------------------------------------------------------- */
-
- +validateAttachments();
- +
- /*
- * If the session is expired during a post this restores the compose session
- * vars.
- @@ -1745,4 +1803,3 @@
- }
- return $succes;
- }
- -
-