From d9ca5b409fd27d7b000f382ae93f3bacbabb5f59 Mon Sep 17 00:00:00 2001 From: lkehresman Date: Thu, 25 Jan 2001 05:25:48 +0000 Subject: [PATCH] fixed some problems in sqimap_read_body(). Please test it out. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@969 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 1 + functions/imap_general.php | 70 ++++++++++++++++++-------------------- src/redirect.php | 2 +- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index 25ba186a..a683c310 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ Version 1.0 -- DEVELOPMENT -------------------------- +- Fixed problems in sqimap_read_body(), made it more reliable Version 1.0pre3 -- January 22, 2001 ----------------------------------- diff --git a/functions/imap_general.php b/functions/imap_general.php index 7222eed9..c91c3ec1 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -15,42 +15,40 @@ function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message) { global $color, $squirrelmail_language, $imap_general_debug; - $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; + if (preg_match ("/^\* [0-9]+ FETCH.*{([0-9]+)}/", $read, $regs)) { + $size = $regs[1]; + } + + $continue = true; + while ($continue) { + // 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)) { + if ($size) { + $dt = $data; + $dt[0] = $dt[count($dt)-1] = ""; + $d = implode ("", $dt); + if (strlen($d) >= $size) { + $continue = false; + } else { + $data[] = $read; + $read = fgets ($imap_stream, 9096); + } + } else { + $continue = false; + } + } else { + $data[] = $read; + $read = fgets ($imap_stream, 9096); + } } $response = $regs[1]; @@ -60,7 +58,7 @@ 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)) { diff --git a/src/redirect.php b/src/redirect.php index 868d0575..8a500d65 100644 --- a/src/redirect.php +++ b/src/redirect.php @@ -14,7 +14,7 @@ if (!isset($strings_php)) include ("../functions/strings.php"); -include("../config/config.php"); + include("../config/config.php"); // Before starting the session, the base URI must be known. // Assuming that this file is in the src/ subdirectory (or -- 2.25.1