From de9497cea760849a05f52848b9a670a7006b97d6 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 15 Aug 2012 09:33:46 -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 0b55bec..df653da 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 6b8cc29..bc1585e 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2128,14 +2128,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 8b75e38..f70b91b 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -2455,7 +2455,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;
@@ -2572,7 +2572,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 8123e9c..8daedf1 100644
--- a/program/include/rcube_storage.php
+++ b/program/include/rcube_storage.php
@@ -505,8 +505,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 f38ca76..536c6b3 100644
--- a/program/steps/mail/viewsource.inc
+++ b/program/steps/mail/viewsource.inc
@@ -47,7 +47,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