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