From 6726f0c369e87c3cc34b2c2815935c87bc196c3d Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 06 Feb 2008 02:41:11 -0500
Subject: [PATCH] Remember decision to display images for a certain message during session (#1484754)

---
 CHANGELOG                   |    5 +++++
 program/steps/mail/func.inc |    8 ++++++--
 program/steps/mail/show.inc |   10 ++++++++--
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index f09983c..a739668 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,10 @@
 CHANGELOG RoundCube Webmail
 ---------------------------
 
+2008/02/06 (thomasb)
+----------
+- Remember decision to display images for a certain message during session (#1484754)
+
 2008/02/05 (thomasb)
 ----------
 - Fix regular expression for checking e-mail address (#1484710)
@@ -8,6 +12,7 @@
 - Respect config when localize folder names (#1484707)
 - Applied patch for updating page title (#1484727, #1484650)
 - Applied patch to prevent from purging inbox by uberlinuxguy (#1484449)
+- Applied patch to prevent bad header delimiters (#1484751)
 - Also send search request when deleting a contact (#1484620)
 - Add CSS hack for Safari
 
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 00de08c..dc71b89 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -638,7 +638,7 @@
     $structure->type = 'content';
     $a_return_parts[] = &$structure;
     }
-
+    
   // message contains alternative parts
   else if ($message_ctype_primary=='multipart' && $message_ctype_secondary=='alternative' && is_array($structure->parts))
     {
@@ -744,6 +744,10 @@
         $a_return_parts = array_merge($a_return_parts, $parts);
         $a_attachments = array_merge($a_attachments, $attachmnts);
         }
+        
+      // ignore "virtual" protocol parts
+      else if ($primary_type=='protocol')
+        continue;
 
       // part is file/attachment
       else if ($mail_part->disposition=='attachment' || $mail_part->disposition=='inline' || $mail_part->headers['content-id'] ||
@@ -861,7 +865,7 @@
   if (!$attrib['id'])
     $attrib['id'] = 'rcmailMsgBody';
 
-  $safe_mode = intval($_GET['_safe']);
+  $safe_mode = $MESSAGE['is_safe'] || intval($_GET['_safe']);
   $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
   $out = '<div '. $attrib_str . ">\n";
   
diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index 2f0fb01..9e9ba8d 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -42,6 +42,12 @@
       return;
       }
     }
+    
+  // check if safe flag is set
+  if ($MESSAGE['is_safe'] = intval($_GET['_safe']))
+    $_SESSION['safe_messages'][$MESSAGE['UID']] = true;
+  else if ($_SESSION['safe_messages'][$MESSAGE['UID']])
+    $MESSAGE['is_safe'] = 1;
 
   // calculate Etag for this request
   $etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().intval($MESSAGE['headers']->mdn_sent).intval($PRINT_MODE));
@@ -58,7 +64,7 @@
   if ($MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID']))
     list($MESSAGE['parts'], $MESSAGE['attachments']) = rcmail_parse_message(
       $MESSAGE['structure'],
-      array('safe' => intval($_GET['_safe']),
+      array('safe' => $MESSAGE['is_safe'],
             'prefer_html' => $CONFIG['prefer_html'],
             'get_url' => $GET_URL.'&_part=%s')
       );
@@ -72,7 +78,7 @@
 
   // give message uid to the client
   $OUTPUT->set_env('uid', $MESSAGE['UID']);
-  $OUTPUT->set_env('safemode', intval($_GET['_safe']));
+  $OUTPUT->set_env('safemode', $MESSAGE['is_safe']);
   
   // check for unset disposition notification
   if ($MESSAGE['headers']->mdn_to && !$MESSAGE['headers']->mdn_sent && $IMAP->get_mailbox_name() != $CONFIG['drafts_mbox'])

--
Gitblit v1.9.1