From fb2f825cd95677a2ede38e0a2ea99b6823841d74 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 15 Aug 2012 09:32:02 -0400
Subject: [PATCH] Fix line separator in exported messages (#1488603)

---
 CHANGELOG                              |    1 +
 program/include/rcube_imap.php         |    7 +++++--
 program/include/rcube_storage.php      |    5 ++++-
 program/steps/mail/viewsource.inc      |    2 +-
 program/include/rcube_imap_generic.php |    4 ++--
 5 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 37170fc..4cbaa6e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix line separator in exported messages (#1488603)
 - Fix XSS issue where plain signatures wasn't secured in HTML mode (#1488613)
 - Fix XSS issue where href="javascript:" wasn't secured (#1488613)
 - Fix impossible to create message with empty plain text part (#1488610)
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 461ecb0..5dd9c12 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2138,14 +2138,17 @@
 
     /**
      * Sends the whole message source to stdout
+     *
+     * @param int  $uid       Message UID
+     * @param bool $formatted Enables line-ending formatting
      */
-    public function print_raw_body($uid)
+    public function print_raw_body($uid, $formatted = true)
     {
         if (!$this->check_connection()) {
             return;
         }
 
-        $this->conn->handlePartBody($this->folder, $uid, true, NULL, NULL, true);
+        $this->conn->handlePartBody($this->folder, $uid, true, null, null, true, null, $formatted);
     }
 
 
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 8d956f2..915a11a 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -2377,7 +2377,7 @@
         return $this->handlePartBody($mailbox, $id, $is_uid, $part);
     }
 
-    function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL)
+    function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL, $formatted=true)
     {
         if (!$this->select($mailbox)) {
             return false;
@@ -2494,7 +2494,7 @@
                         continue;
                     $line = convert_uudecode($line);
                 // default
-                } else {
+                } else if ($formatted) {
                     $line = rtrim($line, "\t\r\n\0\x0B") . "\n";
                 }
 
diff --git a/program/include/rcube_storage.php b/program/include/rcube_storage.php
index 1075b0f..768a26d 100644
--- a/program/include/rcube_storage.php
+++ b/program/include/rcube_storage.php
@@ -502,8 +502,11 @@
 
     /**
      * Sends the whole message source to stdout
+     *
+     * @param int  $uid       Message UID
+     * @param bool $formatted Enables line-ending formatting
      */
-    abstract function print_raw_body($uid);
+    abstract function print_raw_body($uid, $formatted = true);
 
 
     /**
diff --git a/program/steps/mail/viewsource.inc b/program/steps/mail/viewsource.inc
index 59ccb38..c560d7d 100644
--- a/program/steps/mail/viewsource.inc
+++ b/program/steps/mail/viewsource.inc
@@ -44,7 +44,7 @@
     header("Content-Disposition: attachment; filename=\"$filename\"");
   }
 
-  $RCMAIL->storage->print_raw_body($uid);
+  $RCMAIL->storage->print_raw_body($uid, empty($_GET['_save']));
 }
 else
 {

--
Gitblit v1.9.1