From 1845fb6318dd082bf29813833c2f6cb3f1794421 Mon Sep 17 00:00:00 2001 From: alecpl Date: Thu, 18 Mar 2010 10:56:46 +0000 Subject: - Handle 'false' result from iil_C_* functions (#1486511) --- program/lib/imap.inc | 121 +++++++++++++++++++++------------------------------ 1 file changed, 50 insertions(+), 71 deletions(-) (limited to 'program/lib/imap.inc') diff --git a/program/lib/imap.inc b/program/lib/imap.inc index 42677164f..48363bec9 100644 --- a/program/lib/imap.inc +++ b/program/lib/imap.inc @@ -741,32 +741,6 @@ function iil_ExplodeQuotedString($delimiter, $string) { return $result; } -function iil_CheckForRecent($host, $user, $password, $mailbox) { - if (empty($mailbox)) { - $mailbox = 'INBOX'; - } - - $conn = iil_Connect($host, $user, $password, 'plain'); - $fp = $conn->fp; - if ($fp) { - iil_PutLine($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\""); - do { - $line=chop(iil_ReadLine($fp, 300)); - $a=explode(' ', $line); - if (($a[0] == '*') && (strcasecmp($a[2], 'RECENT') == 0)) { - $result = (int) $a[1]; - } - } while (!iil_StartsWith($a[0], 'a002', true)); - - iil_PutLine($fp, "a003 LOGOUT"); - fclose($fp); - } else { - $result = -2; - } - - return $result; -} - function iil_C_Select(&$conn, $mailbox) { if (empty($mailbox)) { @@ -1619,61 +1593,66 @@ function iil_ParseThread($str, $begin, $end, $root, $parent, $depth, &$depthmap, function iil_C_Thread(&$conn, $folder, $algorithm='REFERENCES', $criteria='', $encoding='US-ASCII') { - if (iil_C_Select($conn, $folder)) { - - $encoding = $encoding ? trim($encoding) : 'US-ASCII'; - $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES'; - $criteria = $criteria ? 'ALL '.trim($criteria) : 'ALL'; - - iil_PutLineC($conn->fp, "thrd1 THREAD $algorithm $encoding $criteria"); - do { - $line = trim(iil_ReadLine($conn->fp, 10000)); - if (preg_match('/^\* THREAD/', $line)) { - $str = trim(substr($line, 8)); - $depthmap = array(); - $haschildren = array(); - $tree = iil_ParseThread($str, 0, strlen($str), null, null, 0, $depthmap, $haschildren); - } - } while (!iil_StartsWith($line, 'thrd1', true)); + if (!iil_C_Select($conn, $folder)) { + $conn->error = "Couldn't select $folder"; + return false; + } - $result_code = iil_ParseResult($line); - if ($result_code == 0) { - return array($tree, $depthmap, $haschildren); + $encoding = $encoding ? trim($encoding) : 'US-ASCII'; + $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES'; + $criteria = $criteria ? 'ALL '.trim($criteria) : 'ALL'; + + if (!iil_PutLineC($conn->fp, "thrd1 THREAD $algorithm $encoding $criteria")) { + return false; + } + do { + $line = trim(iil_ReadLine($conn->fp, 10000)); + if (preg_match('/^\* THREAD/', $line)) { + $str = trim(substr($line, 8)); + $depthmap = array(); + $haschildren = array(); + $tree = iil_ParseThread($str, 0, strlen($str), null, null, 0, $depthmap, $haschildren); } - $conn->error = 'iil_C_Thread: ' . $line . "\n"; - return false; + } while (!iil_StartsWith($line, 'thrd1', true)); + + $result_code = iil_ParseResult($line); + if ($result_code == 0) { + return array($tree, $depthmap, $haschildren); } - $conn->error = "iil_C_Thread: Couldn't select \"$folder\"\n"; - return false; + + $conn->error = 'iil_C_Thread: ' . $line . "\n"; + return false; } function iil_C_Search(&$conn, $folder, $criteria) { - if (iil_C_Select($conn, $folder)) { - $data = ''; - - $query = 'srch1 SEARCH ' . chop($criteria); - if (!iil_PutLineC($conn->fp, $query)) { - return false; - } - do { - $line = trim(iil_ReadLine($conn->fp)); - if (iil_StartsWith($line, '* SEARCH')) { - $data .= substr($line, 8); - } else if (preg_match('/^[0-9 ]+$/', $line)) { - $data .= $line; - } - } while (!iil_StartsWith($line, 'srch1', true)); + if (!iil_C_Select($conn, $folder)) { + $conn->error = "Couldn't select $folder"; + return false; + } + + $data = ''; + $query = 'srch1 SEARCH ' . chop($criteria); - $result_code = iil_ParseResult($line); - if ($result_code == 0) { - return preg_split('/\s+/', $data, -1, PREG_SPLIT_NO_EMPTY); + if (!iil_PutLineC($conn->fp, $query)) { + return false; + } + do { + $line = trim(iil_ReadLine($conn->fp)); + if (iil_StartsWith($line, '* SEARCH')) { + $data .= substr($line, 8); + } else if (preg_match('/^[0-9 ]+$/', $line)) { + $data .= $line; } - $conn->error = 'iil_C_Search: ' . $line . "\n"; - return false; + } while (!iil_StartsWith($line, 'srch1', true)); + + $result_code = iil_ParseResult($line); + if ($result_code == 0) { + return preg_split('/\s+/', $data, -1, PREG_SPLIT_NO_EMPTY); } - $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n"; - return false; + + $conn->error = 'iil_C_Search: ' . $line . "\n"; + return false; } function iil_C_Move(&$conn, $messages, $from, $to) { -- cgit v1.2.3