Applied patch #102655. Ha! my first commit !
[squirrelmail.git] / functions / mime.php
index 81cf581cb6c17f2ca557afba60d86a5d5b0865f1..823f1b149888698131da2aa685fa4ec4ce6cebd4 100644 (file)
       if (!$ent_id) $ent_id = 1;
 
       fputs ($imap_stream, "a001 FETCH $id BODY[$ent_id]\r\n");
-      $topline = fgets ($imap_stream, 1024);
-      $size = substr ($topline, strpos($topline, "{")+1); 
-      $size = substr ($size, 0, strpos($size, "}"));
-      $read = fread ($imap_stream, $size);
-      return $read;
+      $data = sqimap_read_data ($imap_stream, 'a001', true, $response, $message);
+      $topline = array_shift($data);
+      while (! ereg('\* [0-9]+ FETCH ', $topline) && data)
+          $topline = array_shift($data);
+      $wholemessage = implode('', $data);
+
+      if (ereg('\{([^\}]*)\}', $topline, $regs)) {
+         return substr($wholemessage, 0, $regs[1]);
+      }
+      else if (ereg('"([^"]*)"', $topline, $regs)) {
+         return $regs[1];
+      }
+      
+      $str = "Body retrival error.  Please report this bug!\n";
+      $str .= "Response:  $response\n";
+      $str .= "Message:  $message\n";
+      $str .= "FETCH line:  $topline";
+      $str .= "---------------\n$wholemessage";
+      foreach ($data as $d)
+      {
+          $str .= htmlspecialchars($d) . "\n";
+      }
+      return $str;
+      
+      return "Body retrival error, please report this bug!\n\nTop line is \"$topline\"\n";
    }
 
    /* -[ END MIME DECODING ]----------------------------------------------------------- */
    
          // If there are other types that shouldn't be formatted, add
          // them here 
-         if ($message->header->type1 != "html") {   
+         if ($body_message->header->type1 != "html") {   
             translateText($body, $wrap_at, $body_message->header->charset);
          }   
    
             $replace = ereg_replace("_", " ", $res[3]);
            // Convert lowercase Quoted Printable to uppercase for
            // quoted_printable_decode to understand it.
-           while (ereg("(=([0-9][a-f])|([a-f][0-9])|([a-f][0-9]))", $replace, $res)) {
+           while (ereg("(=([0-9][abcdef])|([abcdef][0-9])|([abcdef][abcdef]))", $replace, $res)) {
               $replace = str_replace($res[1], strtoupper($res[1]), $replace);
            }
             $replace = quoted_printable_decode($replace);
       global $default_charset;
 
       // Encode only if the string contains 8-bit characters or =?
-      if (ereg("([\200-\377])|=\\?", $string)) {
+      if (ereg("([\200-\377]|=\\?)", $string)) {
          $newstring = "=?$default_charset?Q?";
          
          // First the special characters
          $string = str_replace("_", "=5F", $string);
          $string = str_replace(" ", "_", $string);
 
-
-         while (ereg("([\200-\377])", $string, $regs)) {
-            $replace = $regs[1];
-            $insert = "=" . strtoupper(bin2hex($replace));
+        for ( $ch = 127 ; $ch <= 255 ; $ch++ ) {
+           $replace = chr($ch);
+           $insert = sprintf("=%02X", $ch);
             $string = str_replace($replace, $insert, $string);
+           $ch++;
          }
 
          $newstring = "=?$default_charset?Q?".$string."?=";