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