From 0816567dac1beb14bd5abc95a67f915583a99f33 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 27 Aug 2009 04:08:27 -0400
Subject: [PATCH] Only allow images as 'inline' parts; list other parts as attachments if they have a valid mime type

---
 program/include/rcube_message.php |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 374dc90..7c2457e 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -323,8 +323,16 @@
       $p->ctype_primary = 'text';
       $p->ctype_secondary = 'plain';
       $p->body = rcube_label('encryptedmessage');
+      $p->size = strlen($p->body);
       
-      $this->parts[] = $p;
+      // maybe some plugins are able to decode this encrypted message part
+      $data = $this->app->plugins->exec_hook('message_part_encrypted', array('object' => $this, 'struct' => $structure, 'part' => $p));
+      if (is_array($data['parts'])) {
+        $this->parts = array_merge($this->parts, $data['parts']);
+      }
+      else if ($data['part']) {
+        $this->parts[] = $p;
+      }
     }
     // message contains multiple parts
     else if (is_array($structure->parts) && !empty($structure->parts)) {
@@ -384,16 +392,17 @@
 
           // part belongs to a related message and is linked
           if ($message_ctype_secondary == 'related'
-	      && ($mail_part->headers['content-id'] || $mail_part->headers['content-location'])) {
+              && preg_match('!^image/!', $mail_part->mimetype)
+              && ($mail_part->headers['content-id'] || $mail_part->headers['content-location'])) {
             if ($mail_part->headers['content-id'])
               $mail_part->content_id = preg_replace(array('/^</', '/>$/'), '', $mail_part->headers['content-id']);
             if ($mail_part->headers['content-location'])
               $mail_part->content_location = $mail_part->headers['content-base'] . $mail_part->headers['content-location'];
-    
+              
             $this->inline_parts[] = $mail_part;
           }
           // is a regular attachment
-          else {
+          else if (preg_match('!^[a-z]+/[a-z0-9-.]+$!i', $mail_part->mimetype)) {
             if (!$mail_part->filename)
               $mail_part->filename = 'Part '.$mail_part->mime_id;
             $this->attachments[] = $mail_part;

--
Gitblit v1.9.1