From 2268aa676d4f21f0f26b4c802c6fb9c2c631d206 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 22 Oct 2014 13:02:23 -0400
Subject: [PATCH] Fix handling of uuencoded messages if messages_cache is enabled (#1490108)

---
 CHANGELOG                                  |    1 +
 program/lib/Roundcube/rcube_message.php    |    9 ++-------
 program/lib/Roundcube/rcube_imap_cache.php |   10 ++++++----
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 978fad2..f5ac7a1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -56,6 +56,7 @@
 - Fix displaying of HTML messages with absolutely positioned elements in Larry skin (#1490103)
 - Fix font style display issue in HTML messages with styled <span> elements (#1490101)
 - Fix download of attachments that are part of TNEF message (#1490091)
+- Fix handling of uuencoded messages if messages_cache is enabled (#1490108)
 
 RELEASE 1.0.3
 -------------
diff --git a/program/lib/Roundcube/rcube_imap_cache.php b/program/lib/Roundcube/rcube_imap_cache.php
index 95498e3..81df076 100644
--- a/program/lib/Roundcube/rcube_imap_cache.php
+++ b/program/lib/Roundcube/rcube_imap_cache.php
@@ -1245,13 +1245,15 @@
     private function message_object_prepare(&$msg, &$size = 0)
     {
         // Remove body too big
-        if ($msg->body && ($length = strlen($msg->body))) {
-            $size += $length;
+        if (isset($msg->body)) {
+            $length = strlen($msg->body);
 
-            if ($size > $this->threshold * 1024) {
-                $size -= $length;
+            if ($msg->body_modified || $size + $length > $this->threshold * 1024) {
                 unset($msg->body);
             }
+            else {
+                $size += $length;
+            }
         }
 
         // Fix mimetype which might be broken by some code when message is displayed
diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php
index a00f6bf..4f0f0fd 100644
--- a/program/lib/Roundcube/rcube_message.php
+++ b/program/lib/Roundcube/rcube_message.php
@@ -899,13 +899,6 @@
                 break;
             }
 
-            // update message content-type
-            if ($part->mimetype != 'multipart/mixed') {
-                $part->ctype_primary   = 'multipart';
-                $part->ctype_secondary = 'mixed';
-                $part->mimetype        = $part->ctype_primary . '/' . $part->ctype_secondary;
-            }
-
             $endpos    = $m[0][1];
             $begin_len = strlen($matches[0][0]);
             $end_len   = strlen($m[0][0]);
@@ -916,6 +909,8 @@
 
             // remove attachment body from the message body
             $part->body = substr_replace($part->body, '', $startpos, $endpos + $end_len - $startpos);
+            // mark body as modified so it will not be cached by rcube_imap_cache
+            $part->body_modified = true;
 
             // add attachments to the structure
             $uupart = new rcube_message_part;

--
Gitblit v1.9.1