X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fimap_general.php;h=2b4b9e9dd8ee77e671867292940177134abf33fc;hp=4cc799422a94932d084a8bc4d2226456a0128ad6;hb=863936bbc0edf82aba3403f4cbb88f65c54acee3;hpb=1d33e35ed41c36c4e3639a9cbecbd9aee7ae40fd 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]; } }