From d6284b4d22d1e6912b01228b7d2a63e9fecbc5fb Mon Sep 17 00:00:00 2001
From: till <till@php.net>
Date: Wed, 02 Nov 2011 11:13:42 -0400
Subject: [PATCH] check-in 3.4.6 (without moxieplayer due to a content-spoofing vulnerability)

---
 program/include/rcube_message.php |   29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 4f9a2f2..0ecd86c 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -48,7 +48,6 @@
 
     public $uid = null;
     public $headers;
-    public $structure;
     public $parts = array();
     public $mime_parts = array();
     public $attachments = array();
@@ -77,7 +76,7 @@
         $this->imap->get_all_headers = true;
 
         $this->uid = $uid;
-        $this->headers = $this->imap->get_headers($uid, NULL, true, true);
+        $this->headers = $this->imap->get_message($uid);
 
         if (!$this->headers)
             return;
@@ -94,9 +93,9 @@
                 '_mbox' => $this->imap->get_mailbox_name(), '_uid' => $uid))
         );
 
-        if ($this->structure = $this->imap->get_structure($uid, $this->headers->body_structure)) {
-            $this->get_mime_numbers($this->structure);
-            $this->parse_structure($this->structure);
+        if (!empty($this->headers->structure)) {
+            $this->get_mime_numbers($this->headers->structure);
+            $this->parse_structure($this->headers->structure);
         }
         else {
             $this->body = $this->imap->get_body($uid);
@@ -286,7 +285,7 @@
         if ($message_ctype_primary == 'text' && !$recursive) {
             $structure->type = 'content';
             $this->parts[] = &$structure;
-            
+
             // Parse simple (plain text) message body
             if ($message_ctype_secondary == 'plain')
                 foreach ((array)$this->uu_decode($structure) as $uupart) {
@@ -299,14 +298,16 @@
             $structure->type = 'content';
             $this->parts[] = &$structure;
         }
-        // message contains alternative parts
-        else if ($mimetype == 'multipart/alternative' && is_array($structure->parts)) {
+        // message contains (more than one!) alternative parts
+        else if ($mimetype == 'multipart/alternative'
+            && is_array($structure->parts) && count($structure->parts) > 1
+        ) {
             // get html/plaintext parts
             $plain_part = $html_part = $print_part = $related_part = null;
 
             foreach ($structure->parts as $p => $sub_part) {
                 $sub_mimetype = $sub_part->mimetype;
-        
+
                 // check if sub part is
                 if ($sub_mimetype == 'text/plain')
                     $plain_part = $p;
@@ -323,7 +324,7 @@
                 $this->parse_alternative = true;
                 $this->parse_structure($structure->parts[$related_part], true);
                 $this->parse_alternative = false;
-        
+
                 // if plain part was found, we should unset it if html is preferred
                 if ($this->opt['prefer_html'] && count($this->parts))
                     $plain_part = null;
@@ -373,6 +374,8 @@
             $p->ctype_secondary = 'plain';
             $p->body            = rcube_label('encryptedmessage');
             $p->size            = strlen($p->body);
+
+            $this->parts[] = $p;
         }
         // message contains multiple parts
         else if (is_array($structure->parts) && !empty($structure->parts)) {
@@ -432,7 +435,7 @@
                         $this->attachments[] = $mail_part;
                 }
                 // part message/*
-                else if ($primary_type=='message') {
+                else if ($primary_type == 'message') {
                     $this->parse_structure($mail_part, true);
 
                     // list as attachment as well (mostly .eml)
@@ -496,6 +499,10 @@
                         $this->attachments[] = $mail_part;
                     }
                 }
+                // attachment part as message/rfc822 (#1488026)
+                else if ($mail_part->mimetype == 'message/rfc822') {
+                    $this->parse_structure($mail_part);
+                }
             }
 
             // if this was a related part try to resolve references

--
Gitblit v1.9.1