summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/js/list.js25
-rw-r--r--program/lib/Roundcube/rcube_message.php16
3 files changed, 17 insertions, 25 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 499d5ba07..6fef2d026 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
+- Fix HTML part detection for some specific message structures (#1488992)
- Don't show fake address - phishing prevention (#1488981)
- Fix forward as attachment bug with editormode != 1 (#1488991)
- Fix LIMIT/OFFSET queries handling on MS SQL Server (#1488984)
diff --git a/program/js/list.js b/program/js/list.js
index 4eb96b417..9a531eaea 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -1143,7 +1143,7 @@ drag_mouse_move: function(e)
this.draglayer.html('');
// get subjects of selected messages
- var c, i, n, subject, obj;
+ var i, n, obj;
for (n=0; n<this.selection.length; n++) {
// only show 12 lines
if (n>12) {
@@ -1152,37 +1152,26 @@ drag_mouse_move: function(e)
}
if (obj = this.rows[this.selection[n]].obj) {
- subject = '';
-
- for (c=0, i=0; i<obj.childNodes.length; i++) {
+ for (i=0; i<obj.childNodes.length; i++) {
if (obj.childNodes[i].nodeName == 'TD') {
if (n == 0)
this.drag_start_pos = $(obj.childNodes[i]).offset();
- if (this.subject_col < 0 || (this.subject_col >= 0 && this.subject_col == c)) {
- var entry, node, tmp_node, nodes = obj.childNodes[i].childNodes;
- // find text node
- for (m=0; m<nodes.length; m++) {
- if ((tmp_node = obj.childNodes[i].childNodes[m]) && (tmp_node.nodeType == 3 || tmp_node.nodeName == 'A')) {
- node = tmp_node;
- break;
- }
- }
-
- if (!node)
+ if (this.subject_col < 0 || (this.subject_col >= 0 && this.subject_col == i)) {
+ var subject = $(obj.childNodes[i]).text();
+
+ if (!subject)
break;
- subject = $(node).text();
// remove leading spaces
subject = $.trim(subject);
// truncate line to 50 characters
subject = (subject.length > 50 ? subject.substring(0, 50) + '...' : subject);
- entry = $('<div>').text(subject);
+ var entry = $('<div>').text(subject);
this.draglayer.append(entry);
break;
}
- c++;
}
}
}
diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php
index 60161a419..3f14266d4 100644
--- a/program/lib/Roundcube/rcube_message.php
+++ b/program/lib/Roundcube/rcube_message.php
@@ -210,18 +210,20 @@ class rcube_message
if (!$recursive) {
$level = explode('.', $part->mime_id);
- // Skip if level too deep or part has a file name
- if (count($level) > 2 || $part->filename) {
+ // Skip if part is an attachment
+ if ($this->is_attachment($part)) {
continue;
}
- // HTML part can be on the lower level, if not...
- if (count($level) > 1) {
- array_pop($level);
+ // Check if the part belongs to higher-level's alternative/related
+ while (array_pop($level) !== null) {
+ if (!count($level)) {
+ return true;
+ }
+
$parent = $this->mime_parts[join('.', $level)];
- // ... parent isn't multipart/alternative or related
if ($parent->mimetype != 'multipart/alternative' && $parent->mimetype != 'multipart/related') {
- continue;
+ continue 2;
}
}
}