Various fixes
[squirrelmail.git] / functions / imap_general.php
index 09543e740060c0d6c190f6a1920cdf08d6e753bc..df3cf24dee11e82b2bcf79eac59a6bda3aff63c4 100755 (executable)
@@ -1,6 +1,9 @@
 <?php
+
    /**
     **  imap.php
+    **  Copyright (c) 1999-2001 The Squirrelmail Development Team
+    **  Licensed under the GNU GPL. For full terms see the file COPYING.    
     **
     **  This implements all functions that do general imap functions.
     **
@@ -32,7 +35,7 @@ $imap_general_debug = false;
    function sqimap_read_data_list ($imap_stream, $pre, $handle_errors,
                                    &$response, &$message) {
       global $color, $squirrelmail_language;
-global $imap_general_debug;
+      global $imap_general_debug;
 
       $read = '';
       $resultlist = array();
@@ -49,26 +52,30 @@ global $imap_general_debug;
             $size = $regs[1];
          } else if (ereg("^\\* [0-9]+ FETCH", $read, $regs)) {
             // Sizeless response, probably single-line
-// For debugging purposes
-if ($imap_general_debug) {
-    echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
-    flush();
-}
-            $size = 0;
+
+            // For debugging purposes
+            if ($imap_general_debug) {
+                echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
+                flush();
+            }
+
+            $size = -1;
             $data[] = $read;
             $read = fgets($imap_stream, 9096);
          } else {
-            $size = 0;
+            $size = -1;
          }
          while (1) {
             while (strpos($read, "\n") === false) {
                $read .= fgets($imap_stream, 9096);
             }
-// For debugging purposes
-if ($imap_general_debug) {
-    echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
-    flush();
-}
+
+            // For debugging purposes
+            if ($imap_general_debug) {
+                echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
+                flush();
+            }
+
             // If we know the size, no need to look at the end parameters
             if ($size > 0) {
                if ($total_size == $size) {
@@ -91,7 +98,7 @@ if ($imap_general_debug) {
                $total_size += strlen($read);
             } else {
                if (ereg("^$pre (OK|BAD|NO)(.*)", $read, $regs) ||
-                   ereg("^\\* [0-9]+ FETCH.*", $read, $regs)) {
+                   (($size == -1) && ereg("^\\* [0-9]+ FETCH.*", $read, $regs))) {
                   break;
                } else {
                   $data[] = $read;
@@ -109,10 +116,8 @@ if ($imap_general_debug) {
       $response = $regs[1];
       $message = trim($regs[2]);
       
-if ($imap_general_debug) echo '--<br>';
-
-      if ($handle_errors == false)
-          return $resultlist;
+      if ($imap_general_debug) { echo '--<br>'; }
+      if ($handle_errors == false) { return $resultlist; }
      
       if ($response == 'NO') {
          // ignore this error from m$ exchange, it is not fatal (aka bug)