From: stekkel Date: Wed, 28 Aug 2002 14:52:01 +0000 (+0000) Subject: Fixes from Jason to sqimap_read_data. X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=commitdiff_plain;h=863936bbc0edf82aba3403f4cbb88f65c54acee3;ds=sidebyside Fixes from Jason to sqimap_read_data. This also removes the ")" characters which doesn't belong to the requested data but are part of the imap output. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@3495 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- diff --git a/functions/imap_general.php b/functions/imap_general.php index 4cc79942..2b4b9e9d 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -91,12 +91,15 @@ function sqimap_read_data_list ($imap_stream, $pre, $handle_errors, &$response, $fetch_data = array(); $fetch_data[] = $read; $read = sqimap_fgets($imap_stream); - $i = 0; - while (!preg_match('/^\* [0-9]+ FETCH.*/', $read) && + while (!preg_match('/^\* [0-9]+ FETCH.*/', $read) && !preg_match("/^$pre (OK|BAD|NO)(.*)$/", $read)) { $fetch_data[] = $read; + $last = $read; $read = sqimap_fgets($imap_stream); } + if (isset($last) && preg_match('/^\)/', $last)) { + array_pop($fetch_data); + } $resultlist[] = $fetch_data; break 1; default: @@ -145,72 +148,26 @@ function sqimap_read_data_list ($imap_stream, $pre, $handle_errors, &$response, } function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message, $query = '') { - global $color, $squirrelmail_language; - $read = ''; - $pre_a = explode(' ',trim($pre)); - $pre = $pre_a[0]; - $result = ''; - $data = array(); - $read = sqimap_fgets($imap_stream); - while (1) { - switch (true) { - case preg_match("/^$pre (OK|BAD|NO)(.*)$/", $read, $regs): - case preg_match('/^\* (BYE \[ALERT\])(.*)$/', $read, $regs): - $response = $regs[1]; - $message = trim($regs[2]); - break 2; - case preg_match("/^\* (OK \[PARSE\])(.*)$/", $read): - $read = sqimap_fgets($imap_stream); - break 1; - case preg_match('/^\* [0-9]+ FETCH.*/', $read): - $fetch_data = array(); - $fetch_data[] = $read; - $read = sqimap_fgets($imap_stream); - while (!preg_match("/^$pre (OK|BAD|NO)(.*)$/", $read)) { - $fetch_data[] = $read; - $read = sqimap_fgets($imap_stream); - } - $result = $fetch_data; - break 2; - default: - $data[] = $read; - $read = sqimap_fgets($imap_stream); - break 1; + $res = sqimap_read_data_list($imap_stream, $pre, $handle_errors, $response, $message, $query); + + /* sqimap_read_data should be called for one response + but since it just calls sqimap_read_data_list which + handles multiple responses we need to check for that + and merge the $res array IF they are seperated and + IF it was a FETCH response. */ + + if (isset($res[1]) && is_array($res[1]) && isset($res[1][0]) + && preg_match('/^\* \d+ FETCH/', $res[1][0])) { + $result = array(); + foreach($res as $index=>$value) { + $result = array_merge($result, $res["$index"]); } } - if (!empty($data)) { - $result = $data; + if (isset($result)) { + return $result; } - if ($handle_errors == false) { - return( $result ); - } - elseif ($response == 'NO') { - /* ignore this error from M$ exchange, it is not fatal (aka bug) */ - if (strstr($message, 'command resulted in') === false) { - set_up_language($squirrelmail_language); - echo "
\n" . - _("ERROR : Could not complete request.") . - "
\n" . - _("Query:") . - $query . '
' . - _("Reason Given: ") . - $message . "

\n"; - exit; - } - } - elseif ($response == 'BAD') { - set_up_language($squirrelmail_language); - echo "
\n" . - _("ERROR : Bad or malformed request.") . - "
\n" . - _("Query:") . - $query . '
' . - _("Server responded: ") . - $message . "

\n"; - exit; - } else { - return $result; + return $res[0]; } }