From 4c0cb96a4857860bb0249da0541dc19c1ee93a9e Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sun, 07 Feb 2016 07:30:48 -0500
Subject: [PATCH] Enigma: Fix missing html/plain switch on multipart/signed messages (#1490649)

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

diff --git a/CHANGELOG b/CHANGELOG
index 24baad0..740f21b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Enigma: Fix missing html/plain switch on multipart/signed messages (#1490649)
 - Enigma: Disable format=flowed for signed plain text messages (#1490646)
 - Enigma: Fix handling of encrypted + signed messages (#1490632)
 - Enigma: Fix invalid boundary use in signed messages structure
diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php
index 3e95b2b..d21de34 100644
--- a/program/lib/Roundcube/rcube_message.php
+++ b/program/lib/Roundcube/rcube_message.php
@@ -339,6 +339,7 @@
 
                 $level = explode('.', $part->mime_id);
                 $depth = count($level);
+                $last  = '';
 
                 // Check if the part belongs to higher-level's multipart part
                 // this can be alternative/related/signed/encrypted or mixed
@@ -348,9 +349,12 @@
                         return true;
                     }
 
-                    $parent = $this->mime_parts[join('.', $level)];
+                    $parent    = $this->mime_parts[join('.', $level)];
+                    $max_delta = $depth - (1 + ($last == 'multipart/alternative' ? 1 : 0));
+                    $last      = $parent->mimetype;
+
                     if (!preg_match('/^multipart\/(alternative|related|signed|encrypted|mixed)$/', $parent->mimetype)
-                        || ($parent->mimetype == 'multipart/mixed' && $parent_depth < $depth - 1)) {
+                        || ($parent->mimetype == 'multipart/mixed' && $parent_depth < $max_delta)) {
                         continue 2;
                     }
                 }

--
Gitblit v1.9.1