summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2010-11-10 08:15:41 +0000
committeralecpl <alec@alec.pl>2010-11-10 08:15:41 +0000
commitad3c273c91ecdae72e14e03a4bc4220d0ebdfa41 (patch)
treee544372ba64f9836282dd7ea7bb83454fdde8580
parentd903fb4dd437423f32054abd5b2164b261776555 (diff)
- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189)
-rw-r--r--program/include/rcube_imap_generic.php43
1 files changed, 17 insertions, 26 deletions
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 56f30aa81..864c57193 100644
--- a/program/include/rcube_imap_generic.php
+++ b/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;
}
}