alecpl
2009-04-25 d4d1a2505dfa40c21b6268c352d790e3a4d8ee83
- Fix attachment names encoding when charset isn't specified in attachment part (#1484969): 
assume that the message charset or charset of the first part is better for attachment names
than detected by roundcube


2 files modified
20 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/include/rcube_imap.php 19 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail
===========================
- Fix attachment names encoding when charset isn't specified in attachment part (#1484969)
- Fix message normal priority problem (#1485820)
- Fix autocomplete spinning wheel does not disappear (#1485804)
- Added log_date_format option (#1485709)
program/include/rcube_imap.php
@@ -53,6 +53,7 @@
  var $delimiter = NULL;
  var $caching_enabled = FALSE;
  var $default_charset = 'ISO-8859-1';
  var $struct_charset = NULL;
  var $default_folders = array('INBOX');
  var $default_folders_lc = array('inbox');
  var $fetch_add_headers = '';
@@ -1119,7 +1120,20 @@
      {
      $this->_msg_id = $msg_id;
      $headers = $this->get_headers($uid);
      // set message charset from message headers
      if ($headers->charset)
        $this->struct_charset = $headers->charset;
      // ... or from first part headers
      else if (is_array($structure[2]) && $structure[2][0] == 'charset')
        $this->struct_charset = $structure[2][1];
      else if (is_array($structure[0][2]) && $structure[0][2][0] == 'charset')
        $this->struct_charset = $structure[0][2][1];
      else if (is_array($structure[0][0][2]) && $structure[0][0][2][0] == 'charset')
        $this->struct_charset = $structure[0][0][2][1];
      else
        $this->struct_charset = null;
      $struct = &$this->_structure_part($structure);
      $struct->headers = get_object_vars($headers);
@@ -1364,7 +1378,8 @@
    // decode filename
    if (!empty($filename_mime)) {
      $part->filename = rcube_imap::decode_mime_string($filename_mime, 
        $part->charset ? $part->charset : rc_detect_encoding($filename_mime, $this->default_charset));
        $part->charset ? $part->charset : $this->struct_charset ? $this->struct_charset :
        rc_detect_encoding($filename_mime, $this->default_charset));
      } 
    else if (!empty($filename_encoded)) {
      // decode filename according to RFC 2231, Section 4