|
|
|
@ -3,8 +3,8 @@
|
|
|
|
|
/**
|
|
|
|
|
+-----------------------------------------------------------------------+
|
|
|
|
|
| This file is part of the Roundcube Webmail client |
|
|
|
|
|
| Copyright (C) 2005-2014, The Roundcube Dev Team |
|
|
|
|
|
| Copyright (C) 2011-2014, Kolab Systems AG |
|
|
|
|
|
| Copyright (C) 2005-2016, The Roundcube Dev Team |
|
|
|
|
|
| Copyright (C) 2011-2016, Kolab Systems AG |
|
|
|
|
|
| |
|
|
|
|
|
| Licensed under the GNU General Public License version 3 or |
|
|
|
|
|
| any later version with exceptions for skins & plugins. |
|
|
|
|
@ -101,8 +101,9 @@ class rcube_mime
|
|
|
|
|
// Special chars as defined by RFC 822 need to in quoted string (or escaped).
|
|
|
|
|
$special_chars = '[\(\)\<\>\\\.\[\]@,;:"]';
|
|
|
|
|
|
|
|
|
|
if (!is_array($a))
|
|
|
|
|
if (!is_array($a)) {
|
|
|
|
|
return $out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($a as $val) {
|
|
|
|
|
$j++;
|
|
|
|
@ -273,16 +274,17 @@ class rcube_mime
|
|
|
|
|
public static function parse_headers($headers)
|
|
|
|
|
{
|
|
|
|
|
$a_headers = array();
|
|
|
|
|
$headers = preg_replace('/\r?\n(\t| )+/', ' ', $headers);
|
|
|
|
|
$lines = explode("\n", $headers);
|
|
|
|
|
$c = count($lines);
|
|
|
|
|
$headers = preg_replace('/\r?\n(\t| )+/', ' ', $headers);
|
|
|
|
|
$lines = explode("\n", $headers);
|
|
|
|
|
$count = count($lines);
|
|
|
|
|
|
|
|
|
|
for ($i=0; $i<$c; $i++) {
|
|
|
|
|
for ($i=0; $i<$count; $i++) {
|
|
|
|
|
if ($p = strpos($lines[$i], ': ')) {
|
|
|
|
|
$field = strtolower(substr($lines[$i], 0, $p));
|
|
|
|
|
$value = trim(substr($lines[$i], $p+1));
|
|
|
|
|
if (!empty($value))
|
|
|
|
|
if (!empty($value)) {
|
|
|
|
|
$a_headers[$field] = $value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -448,12 +450,11 @@ class rcube_mime
|
|
|
|
|
$marks = array();
|
|
|
|
|
|
|
|
|
|
foreach ($text as $idx => $line) {
|
|
|
|
|
if (preg_match('/^(>+)/', $line, $m)) {
|
|
|
|
|
if ($q = strspn($line, '>')) {
|
|
|
|
|
// remove quote chars
|
|
|
|
|
$q = strlen($m[1]);
|
|
|
|
|
$line = preg_replace('/^>+/', '', $line);
|
|
|
|
|
$line = substr($line, $q);
|
|
|
|
|
// remove (optional) space-staffing
|
|
|
|
|
$line = preg_replace('/^ /', '', $line);
|
|
|
|
|
if ($line[0] === ' ') $line = substr($line, 1);
|
|
|
|
|
|
|
|
|
|
// The same paragraph (We join current line with the previous one) when:
|
|
|
|
|
// - the same level of quoting
|
|
|
|
@ -475,13 +476,12 @@ class rcube_mime
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$q = 0;
|
|
|
|
|
if ($line == '-- ') {
|
|
|
|
|
$last = $idx;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// remove space-stuffing
|
|
|
|
|
$line = preg_replace('/^ /', '', $line);
|
|
|
|
|
if ($line[0] === ' ') $line = substr($line, 1);
|
|
|
|
|
|
|
|
|
|
if (isset($text[$last]) && $line && !$q_level
|
|
|
|
|
&& $text[$last] != '-- '
|
|
|
|
@ -527,12 +527,13 @@ class rcube_mime
|
|
|
|
|
|
|
|
|
|
foreach ($text as $idx => $line) {
|
|
|
|
|
if ($line != '-- ') {
|
|
|
|
|
if (preg_match('/^(>+)/', $line, $m)) {
|
|
|
|
|
if ($level = strspn($line, '>')) {
|
|
|
|
|
// remove quote chars
|
|
|
|
|
$level = strlen($m[1]);
|
|
|
|
|
$line = preg_replace('/^>+/', '', $line);
|
|
|
|
|
$line = substr($line, $level);
|
|
|
|
|
// remove (optional) space-staffing and spaces before the line end
|
|
|
|
|
$line = preg_replace('/(^ | +$)/', '', $line);
|
|
|
|
|
$line = rtrim($line, ' ');
|
|
|
|
|
if ($line[0] === ' ') $line = substr($line, 1);
|
|
|
|
|
|
|
|
|
|
$prefix = str_repeat('>', $level) . ' ';
|
|
|
|
|
$line = $prefix . self::wordwrap($line, $length - $level - 2, " \r\n$prefix", false, $charset);
|
|
|
|
|
}
|
|
|
|
|