Update
[squirrelmail.git] / functions / mime.php
index 278e5673f202a9a255e47322b19c8b16a1da5d16..e9a6b4a970b51b862c19199fa97e43bfcfb091c2 100644 (file)
@@ -20,12 +20,11 @@ class msg_header {
     /** msg_header contains generic variables for values that **/
     /** could be in a header.                                 **/
 
-    var $type0 = '', $type1 = '', $boundary = '', $charset = '';
-    var $encoding = '', $size = 0, $to = array(), $from = '', $date = '';
-    var $cc = array(), $bcc = array(), $reply_to = '', $subject = '';
-    var $id = 0, $mailbox = '', $description = '', $filename = '';
-    var $entity_id = 0, $message_id = 0, $name = '';
-    // var $priority = "";
+    var $type0 = '', $type1 = '', $boundary = '', $charset = '',
+        $encoding = '', $size = 0, $to = array(), $from = '', $date = '',
+        $cc = array(), $bcc = array(), $reply_to = '', $subject = '',
+        $id = 0, $mailbox = '', $description = '', $filename = '',
+        $entity_id = 0, $message_id = 0, $name = '', $priority = 3;
 }
 
 class message {
@@ -453,7 +452,11 @@ function mime_print_body_lines ($imap_stream, $id, $ent_id, $encoding) {
     $sid = sqimap_session_id();
     // Don't kill the connection if the browser is over a dialup
     // and it would take over 30 seconds to download it.
-    set_time_limit(0);
+
+    // donĀ“t call set_time_limit in safe mode.
+    if (!ini_get("safe_mode")) {
+        set_time_limit(0);
+    }
     
     fputs ($imap_stream, "$sid FETCH $id BODY[$ent_id]\r\n");
     $cnt = 0;
@@ -690,9 +693,17 @@ function formatAttachments ($message, $ent_id, $mailbox, $id) {
                "../src/download.php?absolute_dl=true&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent";
            $ImageURL = '';
 
+           /* this executes the attachment hook with a specific MIME-type.
+            * if that doens't have results, it tries if there's a rule
+            * for a more generic type. */
            $HookResults = do_hook("attachment $type0/$type1", $Links,
                $startMessage, $id, $urlMailbox, $ent, $DefaultLink,
                $display_filename, $where, $what);
+           if(count($HookResults[1]) <= 1) {
+               $HookResults = do_hook("attachment $type0/*", $Links,
+               $startMessage, $id, $urlMailbox, $ent, $DefaultLink,  
+               $display_filename, $where, $what);
+           }
 
            $Links = $HookResults[1];
            $DefaultLink = $HookResults[6];
@@ -759,33 +770,40 @@ function decodeBody($body, $encoding) {
  * RFC1522 (MIME Part Two: Message Header Extensions for Non-ASCII Text).
  */
 function decodeHeader ($string, $utfencode=true) {
-  if (eregi('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=',
+
+if ( is_array( $string ) ) {
+    $string = implode("\n", $string );
+}
+
+if (eregi('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=',
             $string, $res)) {
-     if (ucfirst($res[2]) == "B") {
+    if (ucfirst($res[2]) == 'B') {
         $replace = base64_decode($res[3]);
-     } else {
-        $replace = ereg_replace("_", " ", $res[3]);
-    // Convert lowercase Quoted Printable to uppercase for
-    // quoted_printable_decode to understand it.
-    while (ereg("(=(([0-9][abcdef])|([abcdef][0-9])|([abcdef][abcdef])))", $replace, $res)) {
-       $replace = str_replace($res[1], strtoupper($res[1]), $replace);
-    }
+    } else {
+        $replace = str_replace('_', ' ', $res[3]);
+        // Convert lowercase Quoted Printable to uppercase for
+        // quoted_printable_decode to understand it.
+        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);
-     }
-     /* Only encode into entities by default. Some places
+    }
+    /* Only encode into entities by default. Some places
         don't need the encoding, like the compose form. */
-     if ($utfencode){
-         $replace = charset_decode ($res[1], $replace);
-     }
+    if ($utfencode){
+        $replace = charset_decode ($res[1], $replace);
+    }
 
-     // Remove the name of the character set.
-     $string = eregi_replace ('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=',
-         $replace, $string);
+    // Remove the name of the character set.
+    $string = eregi_replace ('=\\?([^?]+)\\?(q|b)\\?([^?]+)\\?=',
+              $replace, $string);
+
+    // In case there should be more encoding in the string: recurse
+    $string = decodeHeader($string);
+}
 
-     // In case there should be more encoding in the string: recurse
-     return (decodeHeader($string));
-  } else
-     return ($string);
+return ($string);
 }
 
 /*
@@ -836,7 +854,7 @@ function encodeHeader ($string) {
 */
 function MagicHTML( $body, $id ) {
 
-    global $message, $PHP_SELF, $HTTP_SERVER_VARS, 
+    global $message, $HTTP_SERVER_VARS, 
            $attachment_common_show_images;
 
     $attachment_common_show_images =