From eda92ed4c0d2735144df8fa2136584de69634bdb Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 11 May 2014 11:03:45 +0200 Subject: Improved display of plain text messages and text to HTML conversion (#1488937) Now instead of
 we use 
styled with monospace font. We replace whitespace characters with non-breaking spaces where needed. I.e. plain text is always unwrappable, until it uses format=flowed, in such a case only flowed paragraphs are wrappable. Also conversion of text to HTML in compose editor was modified in the same way. --- program/lib/Roundcube/rcube_mime.php | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'program/lib/Roundcube/rcube_mime.php') diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index 091b2fae8..370d5a8d5 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -480,15 +480,17 @@ class rcube_mime /** * Interpret a format=flowed message body according to RFC 2646 * - * @param string $text Raw body formatted as flowed text + * @param string $text Raw body formatted as flowed text + * @param string $mark Mark each flowed line with specified character * * @return string Interpreted text with unwrapped lines and stuffed space removed */ - public static function unfold_flowed($text) + public static function unfold_flowed($text, $mark = null) { $text = preg_split('/\r?\n/', $text); $last = -1; $q_level = 0; + $marks = array(); foreach ($text as $idx => $line) { if (preg_match('/^(>+)/', $line, $m)) { @@ -508,6 +510,10 @@ class rcube_mime ) { $text[$last] .= $line; unset($text[$idx]); + + if ($mark) { + $marks[$last] = true; + } } else { $last = $idx; @@ -520,7 +526,7 @@ class rcube_mime } else { // remove space-stuffing - $line = preg_replace('/^\s/', '', $line); + $line = preg_replace('/^ /', '', $line); if (isset($text[$last]) && $line && $text[$last] != '-- ' @@ -528,6 +534,10 @@ class rcube_mime ) { $text[$last] .= $line; unset($text[$idx]); + + if ($mark) { + $marks[$last] = true; + } } else { $text[$idx] = $line; @@ -538,6 +548,12 @@ class rcube_mime $q_level = $q; } + if (!empty($marks)) { + foreach (array_keys($marks) as $mk) { + $text[$mk] = $mark . $text[$mk]; + } + } + return implode("\r\n", $text); } -- cgit v1.2.3 From d7533442f3f5238e6aaebbaead9214beab040848 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 7 Aug 2014 08:56:29 +0200 Subject: Add default location for mime.types with nginx --- program/lib/Roundcube/rcube_mime.php | 1 + 1 file changed, 1 insertion(+) (limited to 'program/lib/Roundcube/rcube_mime.php') diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index 370d5a8d5..14bc48336 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -822,6 +822,7 @@ class rcube_mime $file_paths[] = '/etc/httpd2/mime.types'; $file_paths[] = '/etc/apache/mime.types'; $file_paths[] = '/etc/apache2/mime.types'; + $file_paths[] = '/etc/nginx/mime.types'; $file_paths[] = '/usr/local/etc/httpd/conf/mime.types'; $file_paths[] = '/usr/local/etc/apache/conf/mime.types'; } -- cgit v1.2.3 From f01666a6229cfacee45d4131e7dbcb52e40abfea Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 21 Aug 2014 18:08:26 +0200 Subject: Fix handling of email addresses with quoted domain part (#1490040) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_mime.php | 16 ++++++++++++++++ tests/Framework/Mime.php | 3 +++ 3 files changed, 20 insertions(+) (limited to 'program/lib/Roundcube/rcube_mime.php') diff --git a/CHANGELOG b/CHANGELOG index 8486a9024..d6606eb16 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -56,6 +56,7 @@ CHANGELOG Roundcube Webmail - Fix errors when adding/updating contacts in active search (#1490015) - Fix incorrect thumbnail rotation with GD and exif orientation data (#1490029) - Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033) +- Fix handling of email addresses with quoted domain part (#1490040) RELEASE 1.0.2 ------------- diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index 14bc48336..f66cf1437 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -394,6 +394,7 @@ class rcube_mime } if ($address) { + $address = self::fix_email($address); $result[$key] = array('name' => $name, 'address' => $address); } } @@ -906,4 +907,19 @@ class rcube_mime return 'image/' . $type; } + /** + * Try to fix invalid email addresses + */ + public static function fix_email($email) + { + $parts = rcube_utils::explode_quoted_string('@', $email); + foreach ($parts as $idx => $part) { + // remove redundant quoting (#1490040) + if ($part[0] == '"' && preg_match('/^"([a-zA-Z0-9._+=-]+)"$/', $part, $m)) { + $parts[$idx] = $m[1]; + } + } + + return implode('@', $parts); + } } diff --git a/tests/Framework/Mime.php b/tests/Framework/Mime.php index d47eba896..43773f1a5 100644 --- a/tests/Framework/Mime.php +++ b/tests/Framework/Mime.php @@ -44,6 +44,8 @@ class Framework_Mime extends PHPUnit_Framework_TestCase 23 => '=?UTF-8?B?IlRlc3QsVGVzdCI=?= ', // invalid, but we do our best to parse correctly 24 => '"email@test.com" <>', + // valid with redundant quoting (#1490040) + 25 => '"user"@"domain.tld"', ); $results = array( @@ -73,6 +75,7 @@ class Framework_Mime extends PHPUnit_Framework_TestCase 22 => array(1, 'John Doe @ SomeBusinessName', 'MAILER-DAEMON'), 23 => array(1, 'Test,Test', 'test@domain.tld'), 24 => array(1, '', 'email@test.com'), + 25 => array(1, '', 'user@domain.tld'), ); foreach ($headers as $idx => $header) { -- cgit v1.2.3