Thomas Bruederli
2014-04-08 188247894f6aff3a11f68bbdf94626b8bf58b852
program/lib/Roundcube/rcube_message.php
@@ -74,6 +74,11 @@
     */
    function __construct($uid, $folder = null)
    {
        // decode combined UID-folder identifier
        if (preg_match('/^\d+-.+/', $uid)) {
            list($uid, $folder) = explode('-', $uid, 2);
        }
        $this->uid  = $uid;
        $this->app  = rcube::get_instance();
        $this->storage = $this->app->get_storage();
@@ -211,16 +216,19 @@
                }
                $level = explode('.', $part->mime_id);
                $depth = count($level);
                // Check if the part belongs to higher-level's multipart part
                // this can be alternative/related/signed/encrypted, but not mixed
                // this can be alternative/related/signed/encrypted or mixed
                while (array_pop($level) !== null) {
                    if (!count($level)) {
                    $parent_depth = count($level);
                    if (!$parent_depth) {
                        return true;
                    }
                    $parent = $this->mime_parts[join('.', $level)];
                    if (!preg_match('/^multipart\/(alternative|related|signed|encrypted)$/', $parent->mimetype)) {
                    if (!preg_match('/^multipart\/(alternative|related|signed|encrypted|mixed)$/', $parent->mimetype)
                        || ($parent->mimetype == 'multipart/mixed' && $parent_depth < $depth - 1)) {
                        continue 2;
                    }
                }
@@ -529,8 +537,9 @@
                    $part_mimetype = $mail_part->real_mimetype;
                    list($primary_type, $secondary_type) = explode('/', $part_mimetype);
                }
                else
                    $part_mimetype = $mail_part->mimetype;
                else {
                    $part_mimetype = $part_orig_mimetype = $mail_part->mimetype;
                  }
                // multipart/alternative
                if ($primary_type == 'multipart') {