From ad3c273c91ecdae72e14e03a4bc4220d0ebdfa41 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 10 Nov 2010 03:15:41 -0500
Subject: [PATCH] - Fix handling of message bodies (quoted-printable encoded) with NULL characters (#1486189)

---
 program/include/rcube_imap_generic.php |   43 +++++++++++++++++--------------------------
 1 files changed, 17 insertions(+), 26 deletions(-)

diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 56f30aa..864c571 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -2080,6 +2080,7 @@
 		        }
             	$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 @@
 					}
 					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;
         	}
     	}
 

--
Gitblit v1.9.1