From 5a2d2a6f75b115183459997cc2aa787d9a085fe8 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 14 Oct 2013 02:53:34 -0400
Subject: [PATCH] Fix HTML part detection when encapsulated inside multipart/signed (#1489372)

---
 CHANGELOG                               |    1 +
 program/lib/Roundcube/rcube_message.php |    7 +++----
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index e14f932..b6c20e0 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix HTML part detection when encapsulated inside multipart/signed (#1489372)
 - Fix text wrapping issue with long unwrappable lines (#1489371)
 - Add spellchecker backend for the After the Deadline service
 - Replace markdown-style [1] link indexes in plain text email bodies
diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php
index 0cc0766..9b662a2 100644
--- a/program/lib/Roundcube/rcube_message.php
+++ b/program/lib/Roundcube/rcube_message.php
@@ -195,8 +195,6 @@
     /**
      * Determine if the message contains a HTML part. This must to be
      * a real part not an attachment (or its part)
-     * This must to be
-     * a real part not an attachment (or its part)
      *
      * @param bool $enriched Enables checking for text/enriched parts too
      *
@@ -214,14 +212,15 @@
 
                 $level = explode('.', $part->mime_id);
 
-                // Check if the part belongs to higher-level's alternative/related
+                // Check if the part belongs to higher-level's multipart part
+                // this can be alternative/related/signed/encrypted, but not mixed
                 while (array_pop($level) !== null) {
                     if (!count($level)) {
                         return true;
                     }
 
                     $parent = $this->mime_parts[join('.', $level)];
-                    if ($parent->mimetype != 'multipart/alternative' && $parent->mimetype != 'multipart/related') {
+                    if (!preg_match('/^multipart\/(alternative|related|signed|encrypted)$/', $parent->mimetype)) {
                         continue 2;
                     }
                 }

--
Gitblit v1.9.1