Aleksander Machniak
2012-06-13 21be27273c6fb74456b187018dc2584a4514a502
Merge branch 'release-0.8' of github.com:roundcube/roundcubemail into release-0.8

Conflicts:
CHANGELOG
7 files modified
83 ■■■■ changed files
CHANGELOG 2 ●●●●● patch | view | raw | blame | history
SQL/mssql.upgrade.sql 4 ●●●● patch | view | raw | blame | history
program/include/rcube_vcard.php 5 ●●●●● patch | view | raw | blame | history
program/js/app.js 2 ●●● patch | view | raw | blame | history
program/lib/Mail/mime.php 16 ●●●● patch | view | raw | blame | history
program/lib/Mail/mimePart.php 53 ●●●● patch | view | raw | blame | history
skins/larry/mail.css 1 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -2,6 +2,8 @@
===========================
- Fix removing contact photo using LDAP addressbook (#1488420)
- Fix storing X-ANNIVERSARY date in vCard format (#1488527)
- Update to Mail_Mime-1.8.5 (#1488521)
- 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 inside PRE elements on html to text conversion
SQL/mssql.upgrade.sql
@@ -246,8 +246,12 @@
-- Updates from version 0.7
ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email]
GO
ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [text] COLLATE Latin1_General_CI_AI NOT NULL
GO
ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email]
GO
-- Updates from version 0.8-rc
program/include/rcube_vcard.php
@@ -315,8 +315,9 @@
        break;
      case 'birthday':
        if ($val = rcube_strtotime($value))
          $this->raw['BDAY'][] = array(0 => date('Y-m-d', $val), 'value' => array('date'));
      case 'anniversary':
        if (($val = rcube_strtotime($value)) && ($fn = self::$fieldmap[$field]))
          $this->raw[$fn][] = array(0 => date('Y-m-d', $val), 'value' => array('date'));
        break;
      case 'address':
program/js/app.js
@@ -1815,7 +1815,7 @@
        html = '<span id="flagicn'+uid+'" class="'+css_class+'">&nbsp;</span>';
      }
      else if (c == 'attachment') {
        if (/application\/|multipart\/m/.test(flags.ctype))
        if (/application\/|multipart\/(m|signed)/.test(flags.ctype))
          html = '<span class="attachment">&nbsp;</span>';
        else if (/multipart\/report/.test(flags.ctype))
          html = '<span class="report">&nbsp;</span>';
program/lib/Mail/mime.php
@@ -48,7 +48,7 @@
 * @author    Aleksander Machniak <alec@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   CVS: $Id$
 * @version   1.8.5
 * @link      http://pear.php.net/package/Mail_mime
 *
 *            This class is based on HTML Mime Mail class from
@@ -89,7 +89,7 @@
 * @author    Sean Coates <sean@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   Release: @package_version@
 * @version   Release: 1.8.5
 * @link      http://pear.php.net/package/Mail_mime
 */
class Mail_mime
@@ -387,6 +387,8 @@
     * @param string $description Content-Description header
     * @param string $h_charset   The character set of the headers e.g. filename
     *                            If not specified, $charset will be used
     * @param array  $add_headers Additional part headers. Array keys can be in form
     *                            of <header_name>:<parameter_name>
     *
     * @return mixed              True on success or PEAR_Error object
     * @access public
@@ -403,7 +405,8 @@
        $n_encoding  = null,
        $f_encoding  = null,
        $description = '',
        $h_charset   = null
        $h_charset   = null,
        $add_headers = array()
    ) {
        $bodyfile = null;
@@ -442,6 +445,7 @@
            'location'    => $location,
            'disposition' => $disposition,
            'description' => $description,
            'add_headers' => $add_headers,
            'name_encoding'     => $n_encoding,
            'filename_encoding' => $f_encoding,
            'headers_charset'   => $h_charset,
@@ -679,6 +683,9 @@
        }
        if (!empty($value['description'])) {
            $params['description'] = $value['description'];
        }
        if (is_array($value['add_headers'])) {
            $params['headers'] = $value['add_headers'];
        }
        $ret = $obj->addSubpart($value['body'], $params);
@@ -1319,7 +1326,8 @@
     */
    function encodeHeader($name, $value, $charset, $encoding)
    {
        return Mail_mimePart::encodeHeader(
        $mime_part = new Mail_mimePart;
        return $mime_part->encodeHeader(
            $name, $value, $charset, $encoding, $this->_build_params['eol']
        );
    }
program/lib/Mail/mimePart.php
@@ -48,7 +48,7 @@
 * @author    Aleksander Machniak <alec@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   CVS: $Id$
 * @version   1.8.5
 * @link      http://pear.php.net/package/Mail_mime
 */
@@ -70,7 +70,7 @@
 * @author    Aleksander Machniak <alec@php.net>
 * @copyright 2003-2006 PEAR <pear-group@php.net>
 * @license   http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version   Release: @package_version@
 * @version   Release: 1.8.5
 * @link      http://pear.php.net/package/Mail_mime
 */
class Mail_mimePart
@@ -156,6 +156,8 @@
    *     headers_charset   - Charset of the headers e.g. filename, description.
    *                         If not set, 'charset' will be used
    *     eol               - End of line sequence. Default: "\r\n"
    *     headers           - Hash array with additional part headers. Array keys can be
    *                         in form of <header_name>:<parameter_name>
    *     body_file         - Location of file with part's body (instead of $body)
    *
    * @access public
@@ -166,6 +168,11 @@
            $this->_eol = $params['eol'];
        } else if (defined('MAIL_MIMEPART_CRLF')) { // backward-copat.
            $this->_eol = MAIL_MIMEPART_CRLF;
        }
        // Additional part headers
        if (!empty($params['headers']) && is_array($params['headers'])) {
            $headers = $params['headers'];
        }
        foreach ($params as $key => $value) {
@@ -216,13 +223,17 @@
                $params['headers_charset'] = $params['charset'];
            }
        }
        // header values encoding parameters
        $h_charset  = !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII';
        $h_language = !empty($params['language']) ? $params['language'] : null;
        $h_encoding = !empty($params['name_encoding']) ? $params['name_encoding'] : null;
        if (!empty($params['filename'])) {
            $headers['Content-Type'] .= ';' . $this->_eol;
            $headers['Content-Type'] .= $this->_buildHeaderParam(
                'name', $params['filename'],
                !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
                !empty($params['language']) ? $params['language'] : null,
                !empty($params['name_encoding']) ? $params['name_encoding'] : null
                'name', $params['filename'], $h_charset, $h_language, $h_encoding
            );
        }
@@ -232,23 +243,41 @@
            if (!empty($params['filename'])) {
                $headers['Content-Disposition'] .= ';' . $this->_eol;
                $headers['Content-Disposition'] .= $this->_buildHeaderParam(
                    'filename', $params['filename'],
                    !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
                    !empty($params['language']) ? $params['language'] : null,
                    'filename', $params['filename'], $h_charset, $h_language,
                    !empty($params['filename_encoding']) ? $params['filename_encoding'] : null
                );
            }
            // add attachment size
            $size = $this->_body_file ? filesize($this->_body_file) : strlen($body);
            if ($size) {
                $headers['Content-Disposition'] .= ';' . $this->_eol . ' size=' . $size;
            }
        }
        if (!empty($params['description'])) {
            $headers['Content-Description'] = $this->encodeHeader(
                'Content-Description', $params['description'],
                !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
                !empty($params['name_encoding']) ? $params['name_encoding'] : 'quoted-printable',
                'Content-Description', $params['description'], $h_charset, $h_encoding,
                $this->_eol
            );
        }
        // Search and add existing headers' parameters
        foreach ($headers as $key => $value) {
            $items = explode(':', $key);
            if (count($items) == 2) {
                $header = $items[0];
                $param  = $items[1];
                if (isset($headers[$header])) {
                    $headers[$header] .= ';' . $this->_eol;
                }
                $headers[$header] .= $this->_buildHeaderParam(
                    $param, $value, $h_charset, $h_language, $h_encoding
                );
                unset($headers[$key]);
            }
        }
        // Default encoding
        if (!isset($this->_encoding)) {
            $this->_encoding = '7bit';
skins/larry/mail.css
@@ -377,6 +377,7 @@
#messagelist tr td.size {
    width: 60px;
    text-align: right;
}
#messagelist tr td.from,