From f358f099bc62a4130d237f5623b5fb48b95658e3 Mon Sep 17 00:00:00 2001 From: fidian Date: Wed, 17 Jan 2001 23:35:53 +0000 Subject: [PATCH] CHEAP HACK to fix the problem. This should REALLY look at the first line returned and check that for a standard structure thing and see if it extends onto multiple lines. If so, there is always a size sent out, so have this function scan past that size and then look for the end tag. Since I don't have the time to delve into IMAP structure to get this done perfectly, I just do a cheap hack to scan to see if there is at least one more character incoming from the IMAP server. Maybe if I have time, I'll tackle this further. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@961 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_general.php | 75 +++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/functions/imap_general.php b/functions/imap_general.php index b8d0e867..1debd618 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -6,7 +6,6 @@ **/ $imap_general_debug = false; - //$imap_general_debug = false; /****************************************************************************** ** Reads the output from the IMAP stream. If handle_errors is set to true, @@ -16,39 +15,71 @@ function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message) { global $color, $squirrelmail_language, $imap_general_debug; - $counter = 0; - do { - $data[$counter] = $read = fgets ($imap_stream, 9096); - if ($imap_general_debug) { echo "$read
"; flush(); } - $counter++; - } while (! ereg("^$pre (OK|BAD|NO)(.*)$", $read, $regs)); + $keep_going = true; + $read = fgets($imap_stream, 9096); + while ($keep_going) + { + // Continue if needed for this single line + while (strpos($read, "\n") === false) + { + $read .= fgets($imap_stream, 9096); + } + + if ($imap_general_debug) + { + echo "$read
\n"; + flush(); + } + + if (ereg("^$pre (OK|BAD|NO)(.*)$", $read, $regs)) + { + // Test if this is really the last line. + // Very much a hack, but what else can I do? + socket_set_blocking($imap_stream, false); + $read_next = fgets($imap_stream, 2); + socket_set_blocking($imap_stream, true); + + if ($read_next == "") + { + $keep_going = 0; + } + } + else + { + $read_next = fgets($imap_stream, 9096); + } + + $data[] = $read; + $read = $read_next; + } $response = $regs[1]; $message = trim($regs[2]); if ($imap_general_debug) echo "--
"; - if ($handle_errors == true) { - if ($response == "NO") { - // ignore this error from m$ exchange, it is not fatal (aka bug) - if (!ereg("command resulted in",$message)) { - set_up_language($squirrelmail_language); - echo "
\n"; - echo _("ERROR : Could not complete request."); - echo "
\n"; - echo _("Reason Given: "); - echo $message . "

\n"; - exit; - } - } else if ($response == "BAD") { + if ($handle_errors == false) + return $data; + + if ($response == "NO") { + // ignore this error from m$ exchange, it is not fatal (aka bug) + if (!ereg("command resulted in",$message)) { set_up_language($squirrelmail_language); echo "
\n"; - echo _("ERROR : Bad or malformed request."); + echo _("ERROR : Could not complete request."); echo "
\n"; - echo _("Server responded: "); + echo _("Reason Given: "); echo $message . "

\n"; exit; } + } else if ($response == "BAD") { + set_up_language($squirrelmail_language); + echo "
\n"; + echo _("ERROR : Bad or malformed request."); + echo "
\n"; + echo _("Server responded: "); + echo $message . "

\n"; + exit; } return $data; -- 2.25.1