Fix attachment sizes in message print page and attachment preview page (#1488515)

- Use size parameter from Content-Disposition header if specified,
  - Calculate size of base64 encoded message parts
pull/13/head
Aleksander Machniak 13 years ago
parent 54be5ccb50
commit 8749e94b4b

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail CHANGELOG Roundcube Webmail
=========================== ===========================
- Fix attachment sizes in message print page and attachment preview page (#1488515)
- Fix XSS vulnerability in message subject handling using Larry skin (#1488519) - Fix XSS vulnerability in message subject handling using Larry skin (#1488519)
- Fix handling of links with various URI schemes e.g. "skype:" (#1488106) - Fix handling of links with various URI schemes e.g. "skype:" (#1488106)
- Fix handling of links inside PRE elements on html to text conversion - Fix handling of links inside PRE elements on html to text conversion

@ -1997,6 +1997,31 @@ class rcmail extends rcube
} }
/**
* Returns real size (calculated) of the message part
*
* @param rcube_message_part Message part
*
* @return string Part size (and unit)
*/
public function message_part_size($part)
{
if (isset($part->d_parameters['size'])) {
$size = $this->show_bytes((int)$part->d_parameters['size']);
}
else {
$size = $part->size;
if ($part->encoding == 'base64') {
$size = $size / 1.33;
}
$size = '~' . $this->show_bytes($size);
}
return $size;
}
/************************************************************************ /************************************************************************
********* Deprecated methods (to be removed) ********* ********* Deprecated methods (to be removed) *********
***********************************************************************/ ***********************************************************************/

@ -1477,13 +1477,13 @@ function rcmail_draftinfo_decode($str)
function rcmail_message_part_controls($attrib) function rcmail_message_part_controls($attrib)
{ {
global $MESSAGE; global $MESSAGE, $RCMAIL;
$part = asciiwords(get_input_value('_part', RCUBE_INPUT_GPC)); $part = asciiwords(get_input_value('_part', RCUBE_INPUT_GPC));
if (!is_object($MESSAGE) || !is_array($MESSAGE->parts) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE->mime_parts[$part]) if (!is_object($MESSAGE) || !is_array($MESSAGE->parts) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE->mime_parts[$part])
return ''; return '';
$part = $MESSAGE->mime_parts[$part]; $part = $MESSAGE->mime_parts[$part];
$table = new html_table(array('cols' => 3)); $table = new html_table(array('cols' => 3));
$filename = $part->filename; $filename = $part->filename;
@ -1497,10 +1497,8 @@ function rcmail_message_part_controls($attrib)
$table->add('download-link', html::a(array('href' => './?'.str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING'])), Q(rcube_label('download')))); $table->add('download-link', html::a(array('href' => './?'.str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING'])), Q(rcube_label('download'))));
} }
if (!empty($part->size)) { $table->add('title', Q(rcube_label('filesize')));
$table->add('title', Q(rcube_label('filesize'))); $table->add('header', Q($RCMAIL->message_part_size($part)));
$table->add('header', Q(show_bytes($part->size)));
}
return $table->show($attrib); return $table->show($attrib);
} }

@ -144,7 +144,7 @@ if ($uid = get_input_value('_uid', RCUBE_INPUT_GET)) {
function rcmail_message_attachments($attrib) function rcmail_message_attachments($attrib)
{ {
global $PRINT_MODE, $MESSAGE; global $PRINT_MODE, $MESSAGE, $RCMAIL;
$out = $ol = ''; $out = $ol = '';
@ -156,7 +156,8 @@ function rcmail_message_attachments($attrib)
} }
if ($PRINT_MODE) { if ($PRINT_MODE) {
$ol .= html::tag('li', null, sprintf("%s (%s)", Q($filename), Q(show_bytes($attach_prop->size)))); $size = $RCMAIL->message_part_size($attach_prop);
$ol .= html::tag('li', null, Q(sprintf("%s (%s)", $filename, $size)));
} }
else { else {
if (mb_strlen($filename) > 50) { if (mb_strlen($filename) > 50) {

Loading…
Cancel
Save