summaryrefslogtreecommitdiff
path: root/roundcubemail/program/include/rcube_imap_generic.php
diff options
context:
space:
mode:
authoralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2010-11-10 08:15:41 +0000
committeralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2010-11-10 08:15:41 +0000
commit2fdca6f455920a3e49f6ed7dcde7ad5c09ec7c1b (patch)
tree37fcb1e8d5bc88ed7446bd07a0e2d5c45cba1806 /roundcubemail/program/include/rcube_imap_generic.php
parent2859a6659ff53affa326bd55a9a2971a414657b7 (diff)
- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189)
git-svn-id: https://svn.roundcube.net/trunk@4207 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'roundcubemail/program/include/rcube_imap_generic.php')
-rw-r--r--roundcubemail/program/include/rcube_imap_generic.php43
1 files changed, 17 insertions, 26 deletions
diff --git a/roundcubemail/program/include/rcube_imap_generic.php b/roundcubemail/program/include/rcube_imap_generic.php
index 56f30aa81..864c57193 100644
--- a/roundcubemail/program/include/rcube_imap_generic.php
+++ b/roundcubemail/program/include/rcube_imap_generic.php
@@ -2080,6 +2080,7 @@ class rcube_imap_generic
}
$bytes -= $len;
+ // BASE64
if ($mode == 1) {
$line = rtrim($line, "\t\r\n\0\x0B");
// create chunks with proper length for base64 decoding
@@ -2092,40 +2093,30 @@ class rcube_imap_generic
}
else
$prev = '';
-
- if ($file)
- fwrite($file, base64_decode($line));
- else if ($print)
- echo base64_decode($line);
- else
- $result .= base64_decode($line);
+ $line = base64_decode($line);
+ // QUOTED-PRINTABLE
} else if ($mode == 2) {
$line = rtrim($line, "\t\r\0\x0B");
- if ($file)
- fwrite($file, quoted_printable_decode($line));
- else if ($print)
- echo quoted_printable_decode($line);
- else
- $result .= quoted_printable_decode($line);
+ $line = quoted_printable_decode($line);
+ // Remove NULL characters (#1486189)
+ $line = str_replace("\x00", '', $line);
+ // UUENCODE
} else if ($mode == 3) {
$line = rtrim($line, "\t\r\n\0\x0B");
if ($line == 'end' || preg_match('/^begin\s+[0-7]+\s+.+$/', $line))
continue;
- if ($file)
- fwrite($file, convert_uudecode($line));
- else if ($print)
- echo convert_uudecode($line);
- else
- $result .= convert_uudecode($line);
+ $line = convert_uudecode($line);
+ // default
} else {
- $line = rtrim($line, "\t\r\n\0\x0B");
- if ($file)
- fwrite($file, $line . "\n");
- else if ($print)
- echo $line . "\n";
- else
- $result .= $line . "\n";
+ $line = rtrim($line, "\t\r\n\0\x0B") . "\n";
}
+
+ if ($file)
+ fwrite($file, $line);
+ else if ($print)
+ echo $line;
+ else
+ $result .= $line;
}
}