summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG2
-rw-r--r--SQL/mssql.upgrade.sql4
-rw-r--r--program/include/rcube_vcard.php5
-rw-r--r--program/js/app.js2
-rw-r--r--program/lib/Mail/mime.php16
-rw-r--r--program/lib/Mail/mimePart.php53
-rw-r--r--skins/larry/mail.css1
7 files changed, 64 insertions, 19 deletions
diff --git a/CHANGELOG b/CHANGELOG
index d6f3b679d..4605c2758 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@ CHANGELOG Roundcube Webmail
===========================
- 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
diff --git a/SQL/mssql.upgrade.sql b/SQL/mssql.upgrade.sql
index 10bae6e47..d111ef3e7 100644
--- a/SQL/mssql.upgrade.sql
+++ b/SQL/mssql.upgrade.sql
@@ -246,8 +246,12 @@ GO
-- 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
diff --git a/program/include/rcube_vcard.php b/program/include/rcube_vcard.php
index e4a42f5cf..c07b4042a 100644
--- a/program/include/rcube_vcard.php
+++ b/program/include/rcube_vcard.php
@@ -315,8 +315,9 @@ class rcube_vcard
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':
diff --git a/program/js/app.js b/program/js/app.js
index 584efdd18..8d02f6f39 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -1815,7 +1815,7 @@ function rcube_webmail()
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>';
diff --git a/program/lib/Mail/mime.php b/program/lib/Mail/mime.php
index cc72f5b29..76c6ec2ff 100644
--- a/program/lib/Mail/mime.php
+++ b/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 @@ require_once 'Mail/mimePart.php';
* @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 @@ class Mail_mime
* @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 @@ class Mail_mime
$n_encoding = null,
$f_encoding = null,
$description = '',
- $h_charset = null
+ $h_charset = null,
+ $add_headers = array()
) {
$bodyfile = null;
@@ -442,6 +445,7 @@ class Mail_mime
'location' => $location,
'disposition' => $disposition,
'description' => $description,
+ 'add_headers' => $add_headers,
'name_encoding' => $n_encoding,
'filename_encoding' => $f_encoding,
'headers_charset' => $h_charset,
@@ -680,6 +684,9 @@ class Mail_mime
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);
return $ret;
@@ -1319,7 +1326,8 @@ class Mail_mime
*/
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']
);
}
diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php
index 821990ee0..4e4170d8e 100644
--- a/program/lib/Mail/mimePart.php
+++ b/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 @@ class Mail_mimePart
* 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
@@ -168,6 +170,11 @@ class Mail_mimePart
$this->_eol = MAIL_MIMEPART_CRLF;
}
+ // Additional part headers
+ if (!empty($params['headers']) && is_array($params['headers'])) {
+ $headers = $params['headers'];
+ }
+
foreach ($params as $key => $value) {
switch ($key) {
case 'encoding':
@@ -216,13 +223,17 @@ class Mail_mimePart
$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 @@ class Mail_mimePart
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';
diff --git a/skins/larry/mail.css b/skins/larry/mail.css
index ab9dd8ffd..c5b79db73 100644
--- a/skins/larry/mail.css
+++ b/skins/larry/mail.css
@@ -377,6 +377,7 @@ a.iconbutton.threadmode.selected {
#messagelist tr td.size {
width: 60px;
+ text-align: right;
}
#messagelist tr td.from,