From 5801afdf3ecc30b3eaaa19afa9d50ea42849271b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 06 Feb 2009 14:04:45 -0500
Subject: [PATCH] - Fix some base64 encoded attachments handling (#1485725)
---
CHANGELOG | 1 +
program/lib/imap.inc | 22 ++++++++++++++++++----
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 810f24c..e6c4a85 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@
----------
- Fix pressing select all/unread multiple times (#1485723)
- Fix selecting all unread does not honor new messages (#1485724)
+- Fix some base64 encoded attachments handling (#1485725)
2009/02/05 (alec)
----------
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 302cfc0..0566322 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -2508,7 +2508,8 @@
$len = $to - $from;
$sizeStr = substr($line, $from, $len);
$bytes = (int)$sizeStr;
-
+ $prev = '';
+
while ($bytes > 0) {
$line = iil_ReadLine($fp, 1024);
$len = strlen($line);
@@ -2518,14 +2519,27 @@
}
$bytes -= strlen($line);
+ $line = rtrim($line, "\t\r\n\0\x0B");
+
if ($mode == 1) {
if ($file)
- fwrite($file, rtrim($line, "\t\r\n\0\x0B") . "\n");
+ fwrite($file, $line . "\n");
else
- $result .= rtrim($line, "\t\r\n\0\x0B") . "\n";
+ $result .= $line . "\n";
} else if ($mode == 2) {
- echo rtrim($line, "\t\r\n\0\x0B") . "\n";
+ echo $line . "\n";
} else if ($mode == 3) {
+ // create chunks with proper length for base64 decoding
+ $line = $prev.$line;
+ $length = strlen($line);
+ if ($length % 4) {
+ $length = floor($length / 4) * 4;
+ $prev = substr($line, $length);
+ $line = substr($line, 0, $length);
+ }
+ else
+ $prev = '';
+
if ($file)
fwrite($file, base64_decode($line));
else
--
Gitblit v1.9.1