From 81b573d98ae143bd11b37ff2027bfad78e2d460c Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 16 Sep 2008 04:49:28 -0400
Subject: [PATCH] - Reduced memory footprint when forwarding attachments (#1485345) - Fixed endless loop in iil_C_HandlePartBody() - rcube_message::get_part_content() speed up using 3rd argument of rcube_imap::get_message_part()

---
 program/include/rcube_imap.php |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 1b5ec16..54f0757 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -1283,9 +1283,10 @@
    * @param  string Part number
    * @param  object rcube_message_part Part object created by get_structure()
    * @param  mixed  True to print part, ressource to write part contents in
+   * @param  resource File pointer to save the message part
    * @return string Message/part body if not printed
    */
-  function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL)
+  function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL, $fp=NULL)
     {
     if (!($msg_id = $this->_uid2id($uid)))
       return FALSE;
@@ -1293,6 +1294,7 @@
     // get part encoding if not provided
     if (!is_object($o_part))
       {
+      write_log('errors', 'get_message_part: !is_object');
       $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id); 
       $structure = iml_GetRawStructureArray($structure_str);
       $part_type = iml_GetPartTypeCode($structure, $part);
@@ -1318,7 +1320,10 @@
       }
     else
       {
-      $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
+      if ($fp && $o_part->encoding == 'base64')
+        return iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 3, $fp);
+      else
+        $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
 
       // decode part body
       if ($o_part->encoding)
@@ -1333,8 +1338,14 @@
 
         $body = rcube_charset_convert($body, $o_part->charset);
         }
+      
+      if ($fp)
+        {
+        fwrite($fp, $body);
+	return true;
+        }
       }
-
+    
     return $body;
     }
 

--
Gitblit v1.9.1