CHEAP HACK to fix the problem. This should REALLY look at the first line
authorfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 17 Jan 2001 23:35:53 +0000 (23:35 +0000)
committerfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 17 Jan 2001 23:35:53 +0000 (23:35 +0000)
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

index b8d0e8678b32994105a51e2c2fbb87407edf1d16..1debd618b7dc3ee211c7b286419d69ba286ef126 100755 (executable)
@@ -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,
    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 "<small><tt><font color=cc0000>$read</font></tt></small><br>"; 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 "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\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 "--<br>";
 
-      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 "<br><b><font color=$color[2]>\n";
-               echo _("ERROR : Could not complete request.");
-               echo "</b><br>\n";
-               echo _("Reason Given: ");
-               echo $message . "</font><br>\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 "<br><b><font color=$color[2]>\n";
-            echo _("ERROR : Bad or malformed request.");
+            echo _("ERROR : Could not complete request.");
             echo "</b><br>\n";
-            echo _("Server responded: ");
+            echo _("Reason Given: ");
             echo $message . "</font><br>\n";
             exit;
          }
+      } else if ($response == "BAD") {
+         set_up_language($squirrelmail_language);
+         echo "<br><b><font color=$color[2]>\n";
+         echo _("ERROR : Bad or malformed request.");
+         echo "</b><br>\n";
+         echo _("Server responded: ");
+         echo $message . "</font><br>\n";
+         exit;
       }
       
       return $data;