Forráskód Böngészése

fixed some problems in sqimap_read_body(). Please test it out.

Luke Ehresman 24 éve
szülő
commit
57564a5cf0
3 módosított fájl, 36 hozzáadás és 37 törlés
  1. 1 0
      ChangeLog
  2. 34 36
      functions/imap_general.php
  3. 1 1
      src/redirect.php

+ 1 - 0
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 
 -----------------------------------

+ 34 - 36
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 "<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;
+      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 "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\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)) { 

+ 1 - 1
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