From ceb52fe07476f9584e0ffe3d5937b47d087a145e Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 19 Nov 2008 09:33:35 -0500
Subject: [PATCH] - Fix handling of some malformed messages (#1484438)

---
 CHANGELOG            |    4 ++++
 program/lib/imap.inc |   26 ++++----------------------
 2 files changed, 8 insertions(+), 22 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index b7e236d..8a63792 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,10 @@
 CHANGELOG RoundCube Webmail
 ---------------------------
 
+2008/11/19 (alec)
+----------
+- Fix handling of some malformed messages (#1484438)
+
 2008/11/15 (alec)
 ----------
 - Fix big memory consumption and speed up searching on servers without SORT capability
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index fb971db..316980c 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -70,6 +70,7 @@
 		- fixed iil_C_Sort() to support very long and/or divided responses
 		- added BYE response simple support for endless loop prevention
 		- added 3rd argument in iil_StartsWith* functions
+		- fix iil_C_FetchPartHeader() in some cases by use of iil_C_HandlePartBody()
 
 ********************************************************/
 
@@ -2368,33 +2369,14 @@
 }
 
 function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
-	$fp     = $conn->fp;
-	$result = false;
-	if (($part == 0) || (empty($part))) {
+
+	if (empty($part)) {
 	    $part = 'HEADER';
 	} else {
     	    $part .= '.MIME';
 	}
     
-	if (iil_C_Select($conn, $mailbox)) {
-		$key     = 'fh' . ($c++);
-		$request = $key . " FETCH $id (BODY.PEEK[$part])";
-		if (!iil_PutLine($fp, $request)) return false;
-		do {
-			$line = chop(iil_ReadLine($fp, 200));
-			$a    = explode(' ', $line);
-			if (($line[0] == '*') && ($a[2] == 'FETCH')
-            			&& ($line[strlen($line)-1] != ')')) {
-				$line=iil_ReadLine($fp, 300);
-				while (trim($line) != ')') {
-					$result .= $line;
-					$line=iil_ReadLine($fp, 300);
-				}
-			}
-		} while (strcmp($a[0], $key) != 0 && ($a[0] != '*' || $a[1] != 'BYE'));
-	}
-	
-	return $result;
+	return iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, 1);
 }
 
 function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode, $file=NULL) {

--
Gitblit v1.9.1