From 4769ead5e8fa2cbee61ac6675d499cb16d7ffb7c Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sun, 10 May 2009 04:37:11 -0400
Subject: [PATCH] - prevent infinite loop on imap error in iil_C_HandlePartBody()

---
 program/lib/imap.inc |   15 +++++++--------
 1 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index f7a46d6..1295d5f 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -2323,7 +2323,7 @@
 	
 	if (iil_C_Select($conn, $mailbox)) {
     		$reply_key = '* ' . $id;
-        
+
     		// format request
 		$key     = 'ftch' . ($c++) . ' ';
 		$request = $key . "FETCH $id (BODY.PEEK[$part])";
@@ -2336,7 +2336,7 @@
     		do {
         		$line = chop(iil_ReadLine($fp, 1000));
         		$a    = explode(' ', $line);
-    		} while ($a[2] != 'FETCH');
+    		} while (!($end = iil_StartsWith($line, $key, true)) && $a[2] != 'FETCH');
     		$len = strlen($line);
 
 		// handle empty "* X FETCH ()" response
@@ -2407,9 +2407,10 @@
         		}
     		}
 	        // read in anything up until last line
-		do {
-        		$line = iil_ReadLine($fp, 1024);
-		} while (!iil_StartsWith($line, $key, true));
+		if (!$end)
+			do {
+        			$line = iil_ReadLine($fp, 1024);
+			} while (!iil_StartsWith($line, $key, true));
         
 		if ($mode == 3 && $file) {
 			return true;
@@ -2425,12 +2426,10 @@
     		}
     		
 		return false;
-	} else {
-		echo 'Select failed.';
 	}
     
 	if ($mode==1) {
-		if ($file) {
+		if ($file && $result) {
 			fwrite($file, $result);
 			return true;
 		}

--
Gitblit v1.9.1