From 4c0cb96a4857860bb0249da0541dc19c1ee93a9e Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 7 Feb 2016 13:30:48 +0100 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 24baad070..740f21b58 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 3e95b2b46..d21de34e6 100644 --- a/program/lib/Roundcube/rcube_message.php +++ b/program/lib/Roundcube/rcube_message.php @@ -339,6 +339,7 @@ class rcube_message $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 @@ class rcube_message 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; } }