Update roundcube to 0.9.2.

RELEASE 0.9.2
-------------
- Fix image thumbnails display in print mode (#1489134)
- Fix height of message headers block (#1489108)
- Fix timeout issue on drag&drop uploads (#1489170)
- Fix default sorting of threaded list when THREAD=REFS isn't supported
- Fix list mode switch to 'List' after saving list settings in Larry skin (#1489164)
- Fix error when there's no writeable addressbook source (#1489162)
- Fix zipdownload plugin issue with filenames charset (#1489156)
- Fix so non-inline images aren't skipped on forward (#1489150)
- Fix "null" instead of empty string on messages list in IE10 (#1489145)
- Fix legacy options handling
- Fix so bounces addresses in Sender headers are skipped on Reply-All (#1489011)
- Fix bug where serialized strings were truncated in PDO::quote() (#1489142)
- Fix displaying messages with invalid self-closing HTML tags (#1489137)
- Fix PHP warning when responding to a message with many Return-Path headers (#1489136)
- Fix unintentional compose window resize (#1489114)
- Fix performance regression in text wrapping function (#1489133)
- Fix connection to posgtres db using unix socket (#1489132)
- Fix handling of comma when adding contact from contacts widget (#1489107)
- Fix bug where a message was opened in both preview pane and new window on double-click (#1489122)
- Fix fatal error when xdebug.max_nesting_level was exceeded in rcube_washtml (#1489110)
- Fix PHP warning in html_table::set_row_attribs() in PHP 5.4 (#1489094)
- Fix invalid option selected in default_font selector when font is unset (#1489112)
- Fix displaying contact with ID divisible by 100 in sql addressbook (#1489121)
- Fix browser warnings on PDF plugin detection (#1489118)
- Fix fatal error when parsing UUencoded messages (#1489119)
This commit is contained in:
taca 2013-06-16 22:04:07 +00:00
parent 2d6bc42eba
commit ea3abf743f
24 changed files with 15 additions and 1090 deletions

View file

@ -1,6 +1,6 @@
# $NetBSD: Makefile,v 1.55 2013/06/15 16:08:09 taca Exp $
# $NetBSD: Makefile,v 1.56 2013/06/16 22:04:07 taca Exp $
DISTNAME= roundcubemail-0.9.1-dep
DISTNAME= roundcubemail-0.9.2-dep
PKGNAME= ${DISTNAME:S/mail-/-/:S/-dep//}
CATEGORIES= mail
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=roundcubemail/}

View file

@ -1,4 +1,4 @@
@comment $NetBSD: PLIST,v 1.28 2013/06/15 16:08:09 taca Exp $
@comment $NetBSD: PLIST,v 1.29 2013/06/16 22:04:07 taca Exp $
share/doc/roundcube/INSTALL
share/doc/roundcube/LICENSE
share/doc/roundcube/README.md
@ -2390,7 +2390,6 @@ share/roundcube/program/localization/zh_TW/csv2vcard.inc
share/roundcube/program/localization/zh_TW/labels.inc
share/roundcube/program/localization/zh_TW/messages.inc
share/roundcube/program/resources/blank.gif
share/roundcube/program/resources/blank.pdf
share/roundcube/program/resources/blank.tif
share/roundcube/program/resources/blocked.gif
share/roundcube/program/steps/addressbook/copy.inc

View file

@ -1,28 +1,9 @@
$NetBSD: distinfo,v 1.30 2013/06/15 16:08:09 taca Exp $
$NetBSD: distinfo,v 1.31 2013/06/16 22:04:07 taca Exp $
SHA1 (roundcubemail-0.9.1-dep.tar.gz) = 48ad1e44eaffc079bb3b5af24ce69feb6aa0315b
RMD160 (roundcubemail-0.9.1-dep.tar.gz) = 0181bae162a64258cfe49076dcdfe590d1fccab5
Size (roundcubemail-0.9.1-dep.tar.gz) = 3483626 bytes
SHA1 (patch-aa) = 4946fab1dd1a809d32de7fa16b9eb1075eb8424a
SHA1 (roundcubemail-0.9.2-dep.tar.gz) = d7f09d12a0f190eaf54f324777a3b2a7afb179c3
RMD160 (roundcubemail-0.9.2-dep.tar.gz) = 9514c08304a1583e0c0b7255a99ffcefce4d62b6
Size (roundcubemail-0.9.2-dep.tar.gz) = 3484377 bytes
SHA1 (patch-aa) = 2391f0ddb6b9ba6026f9db6d7050f3412d02e160
SHA1 (patch-ab) = 19b62d4a24d9b1ccc476f8d3fbe5f386faf6c553
SHA1 (patch-ac) = ea60a00f8d53f36e069f4b61962ff97c980edb20
SHA1 (patch-af) = c0534978e19174d058ac3002692a6bed4e535dc7
SHA1 (patch-installer_config.php) = 6788454eddf4db96f5bd561c9dc45397383797e0
SHA1 (patch-installer_rcube__install.php) = edcfbff2255fe818bd028310d829879d731fefc9
SHA1 (patch-plugins_zipdownload_zipdownload.php) = c0605e036959d5082bd3cde2cf37bb5838cb5623
SHA1 (patch-program_include_rcmail.php) = 8a23e2ffd974983023c98b866c5d7a6e7984e3f8
SHA1 (patch-program_lib_Roundcube_rcube__cache.php) = ce92d42b294a1cde1d8223b6d5dae46d819754de
SHA1 (patch-program_lib_Roundcube_rcube__config.php) = fafc1102722ededc9b16272ba515598026c175c2
SHA1 (patch-program_lib_Roundcube_rcube__db.php) = d7f08a12a3d6131be88d84132b38d2bf2b7b0b2f
SHA1 (patch-program_lib_Roundcube_rcube__db__pgsql.php) = c3cc7651cb38d5a50cca1d7e4b232f2aa3b4a72b
SHA1 (patch-program_lib_Roundcube_rcube__imap.php) = 468e9100366dfc9110dda95d27f40b4fb7e075af
SHA1 (patch-program_lib_Roundcube_rcube__imap__cache.php) = 526e2b2b645a32077116950a4cb2b531b34a649b
SHA1 (patch-program_lib_Roundcube_rcube__mime.php) = ff74d19a6bfce728db75ad2d3950fe762144e859
SHA1 (patch-program_lib_Roundcube_rcube__washtml.php) = d62fb13f45b1dd687bcb367ceb1a7229a0c8177f
SHA1 (patch-program_steps_mail_compose.inc) = 8b9a4ce69eced4c284aee0b69278ff78071da851
SHA1 (patch-program_steps_mail_func.inc) = 5e722794ee5d55c5aad7319998f5c396daae3918
SHA1 (patch-program_steps_mail_show.inc) = f60e27ecece1477c813e6645c6178b1beef41199
SHA1 (patch-skins_classic_print.css) = 2b6d51f3685566a135a2a6291e50109e13726e05
SHA1 (patch-skins_larry_mail.css) = b88a2a90ed0388e3f5020e6eddc5a4f64b333aba
SHA1 (patch-skins_larry_print.css) = d0119e711921cf7751a67ce98481f9ad3f0c19fc
SHA1 (patch-skins_larry_templates_message.html) = 5d997fced39c74590bab3898c63fa40a69f43f99
SHA1 (patch-af) = 1f95a7005569207469563aa37ff48da0383b7668

View file

@ -1,10 +1,10 @@
$NetBSD: patch-aa,v 1.9 2012/01/14 15:36:24 taca Exp $
$NetBSD: patch-aa,v 1.10 2013/06/16 22:04:07 taca Exp $
Use proper directories for log and temporary.
--- config/main.inc.php.dist.orig 2011-11-30 13:11:34.000000000 +0000
--- config/main.inc.php.dist.orig 2013-06-16 15:12:21.000000000 +0000
+++ config/main.inc.php.dist
@@ -174,10 +174,10 @@ $rcmail_config['enable_installer'] = fal
@@ -205,10 +205,10 @@ $rcmail_config['user_aliases'] = false;
// use this folder to store log files (must be writeable for apache user)
// This is used by the 'file' log driver.

View file

@ -1,10 +1,10 @@
$NetBSD: patch-af,v 1.6 2013/06/15 16:08:09 taca Exp $
$NetBSD: patch-af,v 1.7 2013/06/16 22:04:07 taca Exp $
Honor PKG_SYSCONFDIR.
--- program/include/iniset.php.orig 2013-04-15 20:43:00.000000000 +0000
--- program/include/iniset.php.orig 2013-06-16 15:12:21.000000000 +0000
+++ program/include/iniset.php
@@ -44,7 +44,7 @@ if (!defined('INSTALL_PATH')) {
@@ -29,7 +29,7 @@ if (!defined('INSTALL_PATH')) {
}
if (!defined('RCMAIL_CONFIG_DIR')) {

View file

@ -1,33 +0,0 @@
$NetBSD: patch-installer_config.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 70ef48c2f311f1773a4b4deb8fcffd8ea72326f9:
Remove old enable_caching option from Installer
--- installer/config.php.orig 2013-05-16 18:06:35.000000000 +0000
+++ installer/config.php
@@ -15,7 +15,6 @@ $RCI->load_defaults();
// register these boolean fields
$RCI->bool_config_props = array(
'ip_check' => 1,
- 'enable_caching' => 1,
'enable_spellcheck' => 1,
'auto_create_user' => 1,
'smtp_log' => 1,
@@ -127,16 +126,6 @@ echo $check_ipcheck->show(intval($RCI->g
<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.</p>
</dd>
-<dt class="propname">enable_caching</dt>
-<dd>
-<?php
-
-$check_caching = new html_checkbox(array('name' => '_enable_caching', 'id' => "cfgcache"));
-echo $check_caching->show(intval($RCI->getprop('enable_caching')), array('value' => 1));
-
-?>
-<label for="cfgcache">Cache messages in local database</label><br />
-</dd>
<dt class="propname">enable_spellcheck</dt>
<dd>

View file

@ -1,19 +0,0 @@
$NetBSD: patch-installer_rcube__install.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 853d0ab2a402222cc87dc83bb27c3fb2f33d84aa:
Fix version selector - do not list versions newer than 0.9.0, use
"0.9 or newer" instead.
--- installer/rcube_install.php.orig 2013-05-16 18:06:35.000000000 +0000
+++ installer/rcube_install.php
@@ -455,7 +455,8 @@ class rcube_install
'0.6-beta', '0.6',
'0.7-beta', '0.7', '0.7.1', '0.7.2', '0.7.3', '0.7.4',
'0.8-beta', '0.8-rc', '0.8.0', '0.8.1', '0.8.2', '0.8.3', '0.8.4', '0.8.5', '0.8.6',
- '0.9-beta', '0.9-rc', '0.9-rc2', '0.9.0',
+ '0.9-beta', '0.9-rc', '0.9-rc2',
+ // Note: Do not add newer versions here
));
return $select;
}

View file

@ -1,30 +0,0 @@
$NetBSD: patch-plugins_zipdownload_zipdownload.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 057b9e3e7f5bd1707e72812b1e5f977face0baed,
b9139f9f98fe994142dd3e050dac1e6ec9a24309:
Fix zipdownload plugin issue with filenames charset (#1489156)
--- plugins/zipdownload/zipdownload.php.orig 2013-05-16 18:06:35.000000000 +0000
+++ plugins/zipdownload/zipdownload.php
@@ -105,7 +105,7 @@ class zipdownload extends rcube_plugin
foreach ($message->attachments as $part) {
$pid = $part->mime_id;
$part = $message->mime_parts[$pid];
- $disp_name = $this->_convert_filename($part->filename, $part->charset);
+ $disp_name = $this->_convert_filename($part->filename);
if ($part->body) {
$orig_message_raw = $part->body;
@@ -258,9 +258,9 @@ class zipdownload extends rcube_plugin
/**
* Helper function to convert filenames to the configured charset
*/
- private function _convert_filename($str, $from = RCMAIL_CHARSET)
+ private function _convert_filename($str)
{
- $str = rcube_charset::convert($str, $from == '' ? RCUBE_CHARSET : $from, $this->charset);
+ $str = rcube_charset::convert($str, RCUBE_CHARSET, $this->charset);
return strtr($str, array(':'=>'', '/'=>'-'));
}

View file

@ -1,20 +0,0 @@
$NetBSD: patch-program_include_rcmail.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit acb4b71ce55f3d98f7053b7bb8fdcf3c7858fbfc:
Fix error when there's no writeable addressbook source (#1489162)
--- program/include/rcmail.php.orig 2013-05-16 18:06:35.000000000 +0000
+++ program/include/rcmail.php
@@ -228,6 +228,11 @@ class rcmail extends rcube
}
if (!$contacts) {
+ // there's no default, just return
+ if ($default) {
+ return null;
+ }
+
self::raise_error(array(
'code' => 700, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,

View file

@ -1,52 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__cache.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 72c8504b99fbd423651bab0180a044c489ca05cc:
Fix bug where serialized strings were truncated in PDO::quote() (#1489142)
--- program/lib/Roundcube/rcube_cache.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_cache.php
@@ -145,7 +145,7 @@ class rcube_cache
*/
function write($key, $data)
{
- return $this->write_record($key, $this->packed ? serialize($data) : $data);
+ return $this->write_record($key, $this->serialize($data));
}
@@ -219,7 +219,7 @@ class rcube_cache
if ($this->cache_changes[$key]) {
// Make sure we're not going to write unchanged data
// by comparing current md5 sum with the sum calculated on DB read
- $data = $this->packed ? serialize($data) : $data;
+ $data = $this->serialize($data);
if (!$this->cache_sums[$key] || $this->cache_sums[$key] != md5($data)) {
$this->write_record($key, $data);
@@ -255,7 +255,7 @@ class rcube_cache
if ($data) {
$md5sum = md5($data);
- $data = $this->packed ? unserialize($data) : $data;
+ $data = $this->unserialize($data);
if ($nostore) {
return $data;
@@ -283,7 +283,7 @@ class rcube_cache
$key = substr($sql_arr['cache_key'], strlen($this->prefix)+1);
$md5sum = $sql_arr['data'] ? md5($sql_arr['data']) : null;
if ($sql_arr['data']) {
- $data = $this->packed ? unserialize($sql_arr['data']) : $sql_arr['data'];
+ $data = $this->unserialize($sql_arr['data']);
}
if ($nostore) {
@@ -364,7 +364,6 @@ class rcube_cache
* @param string $key Cache key name or pattern
* @param boolean $prefix_mode Enable it to clear all keys starting
* with prefix specified in $key
- *
*/
private function remove_record($key=null, $prefix_mode=false)
{

View file

@ -1,63 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__config.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 55e60c6d85efa3e4b3679c8f9c0b97109ee31ca3:
Fix legacy options handling
--- program/lib/Roundcube/rcube_config.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_config.php
@@ -174,7 +174,7 @@ class rcube_config
ob_end_clean();
if (is_array($rcmail_config)) {
- $this->prop = array_merge($this->prop, $rcmail_config, $this->userprefs);
+ $this->merge($rcmail_config);
return true;
}
}
@@ -195,9 +195,6 @@ class rcube_config
if (isset($this->prop[$name])) {
$result = $this->prop[$name];
}
- else if (isset($this->legacy_props[$name])) {
- return $this->get($this->legacy_props[$name], $def);
- }
else {
$result = $def;
}
@@ -241,6 +238,7 @@ class rcube_config
public function merge($prefs)
{
$this->prop = array_merge($this->prop, $prefs, $this->userprefs);
+ $this->fix_legacy_props();
}
@@ -273,6 +271,8 @@ class rcube_config
$this->userprefs = $prefs;
$this->prop = array_merge($this->prop, $prefs);
+ $this->fix_legacy_props();
+
// override timezone settings with client values
if ($this->prop['timezone'] == 'auto') {
$this->prop['_timezone_value'] = isset($_SESSION['timezone']) ? $this->client_timezone() : $this->prop['_timezone_value'];
@@ -435,4 +435,18 @@ class rcube_config
return date_default_timezone_get();
}
+ /**
+ * Convert legacy options into new ones
+ */
+ private function fix_legacy_props()
+ {
+ foreach ($this->legacy_props as $new => $old) {
+ if (isset($this->prop[$old])) {
+ if (!isset($this->prop[$new])) {
+ $this->prop[$new] = $this->prop[$old];
+ }
+ unset($this->prop[$old]);
+ }
+ }
+ }
}

View file

@ -1,68 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__db.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 72c8504b99fbd423651bab0180a044c489ca05cc:
Fix bug where serialized strings were truncated in PDO::quote() (#1489142)
* commit ab05ee25c1d38c884790337796f7c941e28d36d9:
Fix backward copat. with cached values serialized but not base64-encoded
(#1489142)
--- program/lib/Roundcube/rcube_db.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_db.php
@@ -789,12 +789,19 @@ class rcube_db
/**
* Encodes non-UTF-8 characters in string/array/object (recursive)
*
- * @param mixed $input Data to fix
+ * @param mixed $input Data to fix
+ * @param bool $serialized Enable serialization
*
* @return mixed Properly UTF-8 encoded data
*/
- public static function encode($input)
+ public static function encode($input, $serialized = false)
{
+ // use Base64 encoding to workaround issues with invalid
+ // or null characters in serialized string (#1489142)
+ if ($serialized) {
+ return base64_encode(serialize($input));
+ }
+
if (is_object($input)) {
foreach (get_object_vars($input) as $idx => $value) {
$input->$idx = self::encode($value);
@@ -805,6 +812,7 @@ class rcube_db
foreach ($input as $idx => $value) {
$input[$idx] = self::encode($value);
}
+
return $input;
}
@@ -814,12 +822,24 @@ class rcube_db
/**
* Decodes encoded UTF-8 string/object/array (recursive)
*
- * @param mixed $input Input data
+ * @param mixed $input Input data
+ * @param bool $serialized Enable serialization
*
* @return mixed Decoded data
*/
- public static function decode($input)
+ public static function decode($input, $serialized = false)
{
+ // use Base64 encoding to workaround issues with invalid
+ // or null characters in serialized string (#1489142)
+ if ($serialized) {
+ // Keep backward compatybility where base64 wasn't used
+ if (strpos(substr($input, 0, 16), ':') !== false) {
+ return self::decode(@unserialize($input));
+ }
+
+ return @unserialize(base64_decode($input));
+ }
+
if (is_object($input)) {
foreach (get_object_vars($input) as $idx => $value) {
$input->$idx = self::decode($value);

View file

@ -1,46 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__db__pgsql.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 983308e8b364c0ae5358874087977df9740d97ac:
Fix connection to posgtres db using unix socket (#1489132)
--- program/lib/Roundcube/rcube_db_pgsql.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_db_pgsql.php
@@ -129,4 +129,37 @@ class rcube_db_pgsql extends rcube_db
return isset($this->variables[$varname]) ? $this->variables[$varname] : $default;
}
+ /**
+ * Returns PDO DSN string from DSN array
+ *
+ * @param array $dsn DSN parameters
+ *
+ * @return string DSN string
+ */
+ protected function dsn_string($dsn)
+ {
+ $params = array();
+ $result = 'pgsql:';
+
+ if ($dsn['hostspec']) {
+ $params[] = 'host=' . $dsn['hostspec'];
+ }
+ else if ($dsn['socket']) {
+ $params[] = 'host=' . $dsn['socket'];
+ }
+
+ if ($dsn['port']) {
+ $params[] = 'port=' . $dsn['port'];
+ }
+
+ if ($dsn['database']) {
+ $params[] = 'dbname=' . $dsn['database'];
+ }
+
+ if (!empty($params)) {
+ $result .= implode(';', $params);
+ }
+
+ return $result;
+ }
}

View file

@ -1,31 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__imap.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 35b0a75f72ef1c7c83bf2ad8ba01f6ac1a444122:
Fix default sorting of threaded list when THREAD=REFS isn't supported.
--- program/lib/Roundcube/rcube_imap.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_imap.php
@@ -1336,17 +1336,16 @@ class rcube_imap extends rcube_storage
// THREAD=REFERENCES: sorting by sent date of root message
// THREAD=REFS: sorting by the most recent date in each thread
- if ($this->sort_field && ($this->sort_field != 'date' || $this->get_capability('THREAD') != 'REFS')) {
- $index = $this->index_direct($this->folder, $this->sort_field, $this->sort_order, false);
+ if ($this->get_capability('THREAD') != 'REFS') {
+ $sortby = $this->sort_field ? $this->sort_field : 'date';
+ $index = $this->index_direct($this->folder, $sortby, $this->sort_order, false);
if (!$index->is_empty()) {
$threads->sort($index);
}
}
- else {
- if ($this->sort_order != $threads->get_parameters('ORDER')) {
- $threads->revert();
- }
+ else if ($this->sort_order != $threads->get_parameters('ORDER')) {
+ $threads->revert();
}
}

View file

@ -1,76 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__imap__cache.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 6213c6a6e18848d861f2add83bdb69a1de3f5956:
Fix removing flags from serialized object before saving it in DB
Fix from repository:
* commit 72c8504b99fbd423651bab0180a044c489ca05cc:
Fix bug where serialized strings were truncated in PDO::quote() (#1489142)
--- program/lib/Roundcube/rcube_imap_cache.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_imap_cache.php
@@ -407,8 +407,8 @@ class rcube_imap_cache
return;
}
- $msg = serialize($this->db->encode(clone $message));
$flags = 0;
+ $msg = clone $message;
if (!empty($message->flags)) {
foreach ($this->flags as $idx => $flag) {
@@ -417,7 +417,9 @@ class rcube_imap_cache
}
}
}
+
unset($msg->flags);
+ $msg = $this->db->encode($msg, true);
// update cache record (even if it exists, the update
// here will work as select, assume row exist if affected_rows=0)
@@ -639,7 +641,7 @@ class rcube_imap_cache
if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
$data = explode('@', $sql_arr['data']);
- $index = @unserialize($data[0]);
+ $index = $this->db->decode($data[0], true);
unset($data[0]);
if (empty($index)) {
@@ -676,7 +678,7 @@ class rcube_imap_cache
if ($sql_arr = $this->db->fetch_assoc($sql_result)) {
$data = explode('@', $sql_arr['data']);
- $thread = @unserialize($data[0]);
+ $thread = $this->db->decode($data[0], true);
unset($data[0]);
if (empty($thread)) {
@@ -702,7 +704,7 @@ class rcube_imap_cache
$data, $mbox_data = array(), $exists = false, $modseq = null)
{
$data = array(
- serialize($data),
+ $this->db->encode($data, true),
$sort_field,
(int) $this->skip_deleted,
(int) $mbox_data['UIDVALIDITY'],
@@ -735,7 +737,7 @@ class rcube_imap_cache
private function add_thread_row($mailbox, $data, $mbox_data = array(), $exists = false)
{
$data = array(
- serialize($data),
+ $this->db->encode($data, true),
(int) $this->skip_deleted,
(int) $mbox_data['UIDVALIDITY'],
(int) $mbox_data['UIDNEXT'],
@@ -1067,7 +1069,7 @@ class rcube_imap_cache
*/
private function build_message($sql_arr)
{
- $message = $this->db->decode(unserialize($sql_arr['data']));
+ $message = $this->db->decode($sql_arr['data'], true);
if ($message) {
$message->flags = array();

View file

@ -1,150 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__mime.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit db108e37793c7f8fc8ba11f00d0561d1f0bd32c0:
Fix another text wrapping issue (wrong handling of long unwrappable lines)
* commit f031cb6c5e4fd3dcb7ea243d477825868d8ad17b:
Fix performance regression in text wrapping function (#1489133) - don't use
iconv here
--- program/lib/Roundcube/rcube_mime.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_mime.php
@@ -587,23 +587,20 @@ class rcube_mime
*/
public static function wordwrap($string, $width=75, $break="\n", $cut=false, $charset=null, $wrap_quoted=true)
{
- if (!$charset) {
- $charset = RCUBE_CHARSET;
- }
+ // Note: Never try to use iconv instead of mbstring functions here
+ // Iconv's substr/strlen are 100x slower (#1489113)
- // detect available functions
- $strlen_func = function_exists('iconv_strlen') ? 'iconv_strlen' : 'mb_strlen';
- $strpos_func = function_exists('iconv_strpos') ? 'iconv_strpos' : 'mb_strpos';
- $strrpos_func = function_exists('iconv_strrpos') ? 'iconv_strrpos' : 'mb_strrpos';
- $substr_func = function_exists('iconv_substr') ? 'iconv_substr' : 'mb_substr';
+ if ($charset && $charset != RCUBE_CHARSET && function_exists('mb_internal_encoding')) {
+ mb_internal_encoding($charset);
+ }
// Convert \r\n to \n, this is our line-separator
$string = str_replace("\r\n", "\n", $string);
$separator = "\n"; // must be 1 character length
$result = array();
- while (($stringLength = $strlen_func($string, $charset)) > 0) {
- $breakPos = $strpos_func($string, $separator, 0, $charset);
+ while (($stringLength = mb_strlen($string)) > 0) {
+ $breakPos = mb_strpos($string, $separator, 0);
// quoted line (do not wrap)
if ($wrap_quoted && $string[0] == '>') {
@@ -612,7 +609,7 @@ class rcube_mime
$cutLength = null;
}
else {
- $subString = $substr_func($string, 0, $breakPos, $charset);
+ $subString = mb_substr($string, 0, $breakPos);
$cutLength = $breakPos + 1;
}
}
@@ -623,55 +620,54 @@ class rcube_mime
$cutLength = null;
}
else {
- $subString = $substr_func($string, 0, $breakPos, $charset);
+ $subString = mb_substr($string, 0, $breakPos);
$cutLength = $breakPos + 1;
}
}
else {
- $subString = $substr_func($string, 0, $width, $charset);
+ $subString = mb_substr($string, 0, $width);
// last line
if ($breakPos === false && $subString === $string) {
$cutLength = null;
}
else {
- $nextChar = $substr_func($string, $width, 1, $charset);
+ $nextChar = mb_substr($string, $width, 1);
if ($nextChar === ' ' || $nextChar === $separator) {
- $afterNextChar = $substr_func($string, $width + 1, 1, $charset);
+ $afterNextChar = mb_substr($string, $width + 1, 1);
if ($afterNextChar === false) {
$subString .= $nextChar;
}
- $cutLength = $strlen_func($subString, $charset) + 1;
+ $cutLength = mb_strlen($subString) + 1;
}
else {
- if ($strrpos_func[0] == 'm') {
- $spacePos = $strrpos_func($subString, ' ', 0, $charset);
- }
- else {
- $spacePos = $strrpos_func($subString, ' ', $charset);
- }
+ $spacePos = mb_strrpos($subString, ' ', 0);
if ($spacePos !== false) {
- $subString = $substr_func($subString, 0, $spacePos, $charset);
+ $subString = mb_substr($subString, 0, $spacePos);
$cutLength = $spacePos + 1;
}
+ else if ($cut === false && $breakPos === false) {
+ $subString = $string;
+ $cutLength = null;
+ }
else if ($cut === false) {
- $spacePos = $strpos_func($string, ' ', 0, $charset);
+ $spacePos = mb_strpos($string, ' ', 0);
if ($spacePos !== false && $spacePos < $breakPos) {
- $subString = $substr_func($string, 0, $spacePos, $charset);
+ $subString = mb_substr($string, 0, $spacePos);
$cutLength = $spacePos + 1;
}
else {
- $subString = $substr_func($string, 0, $breakPos, $charset);
+ $subString = mb_substr($string, 0, $breakPos);
$cutLength = $breakPos + 1;
}
}
else {
- $subString = $substr_func($subString, 0, $width, $charset);
+ $subString = mb_substr($subString, 0, $width);
$cutLength = $width;
}
}
@@ -681,13 +677,17 @@ class rcube_mime
$result[] = $subString;
if ($cutLength !== null) {
- $string = $substr_func($string, $cutLength, ($stringLength - $cutLength), $charset);
+ $string = mb_substr($string, $cutLength, ($stringLength - $cutLength));
}
else {
break;
}
}
+ if ($charset && $charset != RCUBE_CHARSET && function_exists('mb_internal_encoding')) {
+ mb_internal_encoding(RCUBE_CHARSET);
+ }
+
return implode($break, $result);
}
@@ -795,7 +795,7 @@ class rcube_mime
}
foreach ($file_paths as $fp) {
- if (is_readable($fp)) {
+ if (@is_readable($fp)) {
$lines = file($fp, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
break;
}

View file

@ -1,139 +0,0 @@
$NetBSD: patch-program_lib_Roundcube_rcube__washtml.php,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 1fe7d6ad75d2a5a2ab72a24de8cd8cdb341cff0e:
Fix displaying messages with invalid self-closing HTML tags (#1489137)
--- program/lib/Roundcube/rcube_washtml.php.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/lib/Roundcube/rcube_washtml.php
@@ -113,10 +113,9 @@ class rcube_washtml
'type', 'rows', 'cols', 'disabled', 'readonly', 'checked', 'multiple', 'value'
);
- /* Block elements which could be empty but cannot be returned in short form (<tag />) */
- static $block_elements = array('div', 'p', 'pre', 'blockquote', 'a', 'font', 'center',
- 'table', 'ul', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'dl', 'strong',
- 'i', 'b', 'u', 'span',
+ /* Elements which could be empty and be returned in short form (<tag />) */
+ static $void_elements = array('area', 'base', 'br', 'col', 'command', 'embed', 'hr',
+ 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'
);
/* State for linked objects in HTML */
@@ -134,12 +133,15 @@ class rcube_washtml
/* Ignore these HTML tags but process their content */
private $_ignore_elements = array();
- /* Block elements which could be empty but cannot be returned in short form (<tag />) */
- private $_block_elements = array();
+ /* Elements which could be empty and be returned in short form (<tag />) */
+ private $_void_elements = array();
/* Allowed HTML attributes */
private $_html_attribs = array();
+ /* Max nesting level */
+ private $max_nesting_level;
+
/**
* Class constructor
@@ -149,9 +151,9 @@ class rcube_washtml
$this->_html_elements = array_flip((array)$p['html_elements']) + array_flip(self::$html_elements) ;
$this->_html_attribs = array_flip((array)$p['html_attribs']) + array_flip(self::$html_attribs);
$this->_ignore_elements = array_flip((array)$p['ignore_elements']) + array_flip(self::$ignore_elements);
- $this->_block_elements = array_flip((array)$p['block_elements']) + array_flip(self::$block_elements);
+ $this->_void_elements = array_flip((array)$p['void_elements']) + array_flip(self::$void_elements);
- unset($p['html_elements'], $p['html_attribs'], $p['ignore_elements'], $p['block_elements']);
+ unset($p['html_elements'], $p['html_attribs'], $p['ignore_elements'], $p['void_elements']);
$this->config = $p + array('show_washed' => true, 'allow_remote' => false, 'cid_map' => array());
}
@@ -284,12 +286,26 @@ class rcube_washtml
* It output only allowed tags with allowed attributes
* and allowed inline styles
*/
- private function dumpHtml($node)
+ private function dumpHtml($node, $level = 0)
{
if (!$node->hasChildNodes()) {
return '';
}
+ $level++;
+
+ if ($this->max_nesting_level > 0 && $level == $this->max_nesting_level - 1) {
+ // log error message once
+ if (!$this->max_nesting_level_error) {
+ $this->max_nesting_level_error = true;
+ rcube::raise_error(array('code' => 500, 'type' => 'php',
+ 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => "Maximum nesting level exceeded (xdebug.max_nesting_level={$this->max_nesting_level})"),
+ true, false);
+ }
+ return '<!-- ignored -->';
+ }
+
$node = $node->firstChild;
$dump = '';
@@ -299,19 +315,19 @@ class rcube_washtml
$tagName = strtolower($node->tagName);
if ($callback = $this->handlers[$tagName]) {
$dump .= call_user_func($callback, $tagName,
- $this->wash_attribs($node), $this->dumpHtml($node), $this);
+ $this->wash_attribs($node), $this->dumpHtml($node, $level), $this);
}
else if (isset($this->_html_elements[$tagName])) {
- $content = $this->dumpHtml($node);
+ $content = $this->dumpHtml($node, $level);
$dump .= '<' . $tagName . $this->wash_attribs($node) .
- ($content != '' || isset($this->_block_elements[$tagName]) ? ">$content</$tagName>" : ' />');
+ ($content === '' && isset($this->_void_elements[$tagName]) ? ' />' : ">$content</$tagName>");
}
else if (isset($this->_ignore_elements[$tagName])) {
$dump .= '<!-- ' . htmlspecialchars($tagName, ENT_QUOTES) . ' not allowed -->';
}
else {
$dump .= '<!-- ' . htmlspecialchars($tagName, ENT_QUOTES) . ' ignored -->';
- $dump .= $this->dumpHtml($node); // ignore tags not its content
+ $dump .= $this->dumpHtml($node, $level); // ignore tags not its content
}
break;
@@ -324,14 +340,14 @@ class rcube_washtml
break;
case XML_HTML_DOCUMENT_NODE:
- $dump .= $this->dumpHtml($node);
+ $dump .= $this->dumpHtml($node, $level);
break;
case XML_DOCUMENT_TYPE_NODE:
break;
default:
- $dump . '<!-- node type ' . $node->nodeType . ' -->';
+ $dump .= '<!-- node type ' . $node->nodeType . ' -->';
}
} while($node = $node->nextSibling);
@@ -358,6 +374,9 @@ class rcube_washtml
$this->config['base_url'] = '';
}
+ // Detect max nesting level (for dumpHTML) (#1489110)
+ $this->max_nesting_level = (int) @ini_get('xdebug.max_nesting_level');
+
@$node->loadHTML($html);
return $this->dumpHtml($node);
}
@@ -405,6 +424,7 @@ class rcube_washtml
rcube::raise_error(array('code' => 620, 'type' => 'php',
'line' => __LINE__, 'file' => __FILE__,
'message' => $errstr), true, false);
+
return '';
}

View file

@ -1,41 +0,0 @@
$NetBSD: patch-program_steps_mail_compose.inc,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 0a7df4a32e86a103a5f1fe801374383a195ba1a5:
Fix so bounces addresses in Sender headers are skipped on Reply-All
(#1489011)
* commit aafc0a3d24149da9f7350f760932898319041815:
Fix so non-inline images aren't skipped on forward (#1489150)
--- program/steps/mail/compose.inc.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/steps/mail/compose.inc
@@ -143,7 +143,7 @@ $OUTPUT->set_env('top_posting', intval($
$OUTPUT->set_env('recipients_separator', trim($RCMAIL->config->get('recipients_separator', ',')));
// default font for HTML editor
-$font = rcube_fontdefs($RCMAIL->config->get('default_font', 'Verdana'));
+$font = rcube_fontdefs($RCMAIL->config->get('default_font'));
if ($font && !is_array($font)) {
$OUTPUT->set_env('default_font', $font);
}
@@ -318,7 +318,8 @@ foreach ($parts as $header) {
$fvalue .= $v;
if ($v = $MESSAGE->headers->cc)
$fvalue .= (!empty($fvalue) ? $separator : '') . $v;
- if ($v = $MESSAGE->headers->get('Sender', false))
+ // Use Sender header (#1489011)
+ if (($v = $MESSAGE->headers->get('Sender', false)) && strpos($v, '-bounces@') === false)
$fvalue .= (!empty($fvalue) ? $separator : '') . $v;
// When To: and Reply-To: are the same we add From: address to the list (#1489037)
@@ -1007,8 +1008,8 @@ function rcmail_write_compose_attachment
if ($part->ctype_primary == 'message' && $compose_mode == RCUBE_COMPOSE_REPLY) {
continue;
}
- // skip inline images when forwarding in plain text
- if ($part->content_id && !$bodyIsHtml && $compose_mode == RCUBE_COMPOSE_FORWARD) {
+ // skip inline images when forwarding
+ if ($part->content_id && $part->disposition == 'inline' && $compose_mode == RCUBE_COMPOSE_FORWARD) {
continue;
}

View file

@ -1,50 +0,0 @@
$NetBSD: patch-program_steps_mail_func.inc,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit db108e37793c7f8fc8ba11f00d0561d1f0bd32c0:
Fix another text wrapping issue (wrong handling of long unwrappable lines)
* commit f5fac810dd2b9276994585789cc68f71c4cd4cd3:
Fix PHP warning when responding to a message with many Return-Path headers
(#1489136)
--- program/steps/mail/func.inc.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/steps/mail/func.inc
@@ -1532,11 +1532,11 @@ function rcmail_address_string($input, $
/**
* Wrap text to a given number of characters per line
* but respect the mail quotation of replies messages (>).
- * Finally add another quotation level by prpending the lines
+ * Finally add another quotation level by prepending the lines
* with >
*
* @param string Text to wrap
- * @param int The line width
+ * @param int The line width
* @return string The wrapped text
*/
function rcmail_wrap_and_quote($text, $length = 72)
@@ -1552,7 +1552,7 @@ function rcmail_wrap_and_quote($text, $l
$line = '>' . rtrim($line);
else if (mb_strlen($line) > $max) {
$newline = '';
- foreach(explode("\n", rc_wordwrap($line, $length - 2)) as $l) {
+ foreach (explode("\n", rc_wordwrap($line, $length - 2)) as $l) {
if (strlen($l))
$newline .= '> ' . $l . "\n";
else
@@ -1803,9 +1803,12 @@ function rcmail_identity_select($MESSAGE
// Try Return-Path
if ($from_idx === null && ($return_path = $MESSAGE->headers->others['return-path'])) {
foreach ($identities as $idx => $ident) {
- if (strpos($return_path, str_replace('@', '=', $ident['email_ascii']).'@') !== false) {
- $from_idx = $idx;
- break;
+ $ident = str_replace('@', '=', $ident['email_ascii']) . '@';
+ foreach ((array)$return_path as $path) {
+ if (strpos($path, $ident) !== false) {
+ $from_idx = $idx;
+ break 2;
+ }
}
}
}

View file

@ -1,25 +0,0 @@
$NetBSD: patch-program_steps_mail_show.inc,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit acb4b71ce55f3d98f7053b7bb8fdcf3c7858fbfc:
Fix error when there's no writeable addressbook source (#1489162)
--- program/steps/mail/show.inc.orig 2013-05-16 18:06:36.000000000 +0000
+++ program/steps/mail/show.inc
@@ -255,9 +255,13 @@ function rcmail_contact_exists($email)
if ($email) {
// @TODO: search in all address books?
$CONTACTS = $RCMAIL->get_address_book(-1, true);
- $existing = $CONTACTS->search('email', $email, true, false);
- if ($existing->count)
- return true;
+
+ if (is_object($CONTACTS)) {
+ $existing = $CONTACTS->search('email', $email, true, false);
+ if ($existing->count) {
+ return true;
+ }
+ }
}
return false;

View file

@ -1,40 +0,0 @@
$NetBSD: patch-skins_classic_print.css,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 50d0a12933f5b58506cfe0df477eeb81b727d41e:
Add styles for image thumbnails in print mode (#1489134)
--- skins/classic/print.css.orig 2013-05-16 18:06:37.000000000 +0000
+++ skins/classic/print.css
@@ -136,3 +136,31 @@ div.message-part blockquote blockquote b
border-left: 2px solid #bb0000;
border-right: 2px solid #bb0000;
}
+
+p.image-attachment
+{
+ position: relative;
+ padding: 1em;
+ border-top: 1px solid #ccc;
+}
+
+p.image-attachment a.image-link
+{
+ float: left;
+ display: block;
+ margin-right: 2em;
+ min-width: 160px;
+ min-height: 60px;
+ text-align: center;
+}
+
+p.image-attachment .image-filename
+{
+ display: block;
+ line-height: 1.6em;
+}
+
+p.image-attachment .attachment-links
+{
+ display: none;
+}

View file

@ -1,118 +0,0 @@
$NetBSD: patch-skins_larry_mail.css,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 63049afbfe457d9b1dd709e7d8b108218c5ea3f2:
Set minimum height for message headers block (#1489108)
--- skins/larry/mail.css.orig 2013-05-16 18:06:37.000000000 +0000
+++ skins/larry/mail.css
@@ -151,7 +151,7 @@ a.iconbutton.threadmode.selected {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
- background-image: url(images/listicons.png?v=bd98.25486);
+ background-image: url(images/listicons.png);
background-repeat: no-repeat;
background-position: 6px 3px;
}
@@ -254,7 +254,7 @@ a.iconbutton.threadmode.selected {
left: 19px;
width: 13px;
height: 13px;
- background: url(images/listicons.png?v=bd98.25486) -3px -144px no-repeat;
+ background: url(images/listicons.png) -3px -144px no-repeat;
cursor: pointer;
}
@@ -376,7 +376,7 @@ a.iconbutton.threadmode.selected {
right: 4px;
width: 20px;
height: 18px;
- background: url(images/buttons.png?v=abf1.36693) -3px -458px no-repeat;
+ background: url(images/buttons.png) -3px -458px no-repeat;
}
#mailpreviewtoggle.enabled {
@@ -463,7 +463,7 @@ a.iconbutton.threadmode.selected {
#messagelist thead tr td.sortedDESC a {
color: #004458;
text-decoration: underline;
- background: url(images/listicons.png?v=bd98.25486) right -912px no-repeat;
+ background: url(images/listicons.png) right -912px no-repeat;
}
#messagelist thead tr td.sortedASC a {
@@ -526,7 +526,7 @@ a.iconbutton.threadmode.selected {
height: 18px;
width: 20px;
padding: 0;
- background: url(images/listicons.png?v=bd98.25486) -100px 0 no-repeat;
+ background: url(images/listicons.png) -100px 0 no-repeat;
}
#messagelist tbody tr td.attachment span.attachment {
@@ -826,7 +826,7 @@ h3.subject {
left: 0;
width: 18px;
height: 16px;
- background: url(images/buttons.png?v=abf1.36693) -27px -242px no-repeat;
+ background: url(images/buttons.png) -27px -242px no-repeat;
}
.moreheaderstoggle.remove .iconlink {
@@ -846,7 +846,7 @@ div.more-headers {
width: 12px;
height: 10px;
cursor: pointer;
- background: url(images/buttons.png?v=abf1.36693) center -1579px no-repeat;
+ background: url(images/buttons.png) center -1579px no-repeat;
}
div.hide-headers {
@@ -903,7 +903,7 @@ div.hide-headers {
width: 32px;
height: 32px;
overflow: hidden;
- background: url(images/contactpic_32px.png?v=09a3.287) center center no-repeat #fff;
+ background: url(images/contactpic_32px.png) center center no-repeat #fff;
border-radius: 3px;
}
@@ -913,6 +913,10 @@ div.hide-headers {
border-radius: 3px;
}
+#messageheader .message-headers {
+ min-height: 60px;
+}
+
#messageheader #contactphoto {
display: block;
position: absolute;
@@ -923,7 +927,7 @@ div.hide-headers {
overflow: hidden;
border-radius: 4px;
border: 1px solid #e6e6e6;
- background: url(images/contactpic_48px.png?v=1bc4.353) center center no-repeat #fff;
+ background: url(images/contactpic_48px.png) center center no-repeat #fff;
}
#messageheader #contactphoto img {
@@ -1200,7 +1204,7 @@ div.message-partheaders .headers-table t
}
#compose-contacts li a, #contacts-table td {
- background: url(images/listicons.png?v=bd98.25486) -100px 0 no-repeat;
+ background: url(images/listicons.png) -100px 0 no-repeat;
overflow: hidden;
padding-left: 36px;
text-overflow: ellipsis;
@@ -1412,7 +1416,7 @@ div.message-partheaders .headers-table t
}
#compose-attachments.droptarget {
- background-image: url(images/filedrop.png?v=deab.605);
+ background-image: url(images/filedrop.png);
background-position: center bottom;
background-repeat: no-repeat;
}

View file

@ -1,36 +0,0 @@
$NetBSD: patch-skins_larry_print.css,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 50d0a12933f5b58506cfe0df477eeb81b727d41e:
Add styles for image thumbnails in print mode (#1489134)
--- skins/larry/print.css.orig 2013-05-16 18:06:37.000000000 +0000
+++ skins/larry/print.css
@@ -123,3 +123,27 @@ div.message-part blockquote blockquote b
border-left: 2px solid #b00;
border-right: 2px solid #b00;
}
+
+p.image-attachment {
+ position: relative;
+ padding: 1em;
+ border-top: 1px solid #ccc;
+}
+
+p.image-attachment a.image-link {
+ float: left;
+ display: block;
+ margin-right: 2em;
+ min-width: 160px;
+ min-height: 60px;
+ text-align: center;
+}
+
+p.image-attachment .image-filename {
+ display: block;
+ line-height: 1.6em;
+}
+
+p.image-attachment .attachment-links {
+ display: none;
+}

View file

@ -1,18 +0,0 @@
$NetBSD: patch-skins_larry_templates_message.html,v 1.1 2013/06/15 16:08:09 taca Exp $
Fix from repository:
* commit 63049afbfe457d9b1dd709e7d8b108218c5ea3f2:
Set minimum height for message headers block (#1489108)
--- skins/larry/templates/message.html.orig 2013-05-16 18:06:37.000000000 +0000
+++ skins/larry/templates/message.html
@@ -44,7 +44,9 @@
<span class="moreheaderstoggle"></span>
<h2 class="subject"><roundcube:object name="messageHeaders" valueOf="subject" /></h2>
+<div class="message-headers">
<roundcube:object name="messageHeaders" class="headers-table" addicon="/images/addcontact.png" exclude="subject" max="20" />
+</div>
<roundcube:object name="messageFullHeaders" id="full-headers" />
<!-- record navigation -->