From cb4149cc6cf9d440d07b389591954b4b03a1f82f Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 10 Aug 2015 14:56:01 -0400
Subject: [PATCH] Merge branch 'master' of github.com:roundcube/roundcubemail

---
 CHANGELOG                               |    1 +
 program/lib/Roundcube/rcube_vcard.php   |    5 -----
 program/lib/Roundcube/rcube_washtml.php |    3 +++
 plugins/password/drivers/cpanel.php     |   32 ++++++++++++++++++--------------
 program/localization/index.inc          |    1 +
 tests/Framework/Washtml.php             |    8 ++++++++
 6 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index ba56486..1526726 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -37,6 +37,7 @@
 - Fix error when using back button after sending an email (#1490009)
 - Fix removing signature when switching to identity with an empty sig in HTML mode (#1490470)
 - Disable links list generation on html-to-text conversion of identities or composed message (#1490437)
+- Fix "washing" of style elements wrapped into many lines
 
 RELEASE 1.1.2
 -------------
diff --git a/plugins/password/drivers/cpanel.php b/plugins/password/drivers/cpanel.php
index 663c125..9446fde 100644
--- a/plugins/password/drivers/cpanel.php
+++ b/plugins/password/drivers/cpanel.php
@@ -49,20 +49,16 @@
         $this->xmlapi->set_output('json');
         $this->xmlapi->set_debug(0);
 
-        if ($this->setPassword($_SESSION['username'], $newpass)) {
-            return PASSWORD_SUCCESS;
-        }
-        else {
-            return PASSWORD_ERROR;
-        }
+        return $this->setPassword($_SESSION['username'], $newpass);
     }
 
     /**
      * Change email account password
      *
-     * Returns true on success or false on failure.
-     * @param string $password email account password
-     * @return bool
+     * @param string $address  Email address/username
+     * @param string $password Email account password
+     *
+     * @return int|array Operation status
      */
     function setPassword($address, $password)
     {
@@ -75,13 +71,21 @@
 
         $data['password'] = $password;
 
-        $query = $this->xmlapi->api2_query($this->cuser, 'Email', 'passwdpop', $data);
-        $query = json_decode($query, true);
+        $query  = $this->xmlapi->api2_query($this->cuser, 'Email', 'passwdpop', $data);
+        $query  = json_decode($query, true);
+        $result = $query['cpanelresult']['data'][0];
 
-        if ($query['cpanelresult']['data'][0]['result'] == 1) {
-            return true;
+        if ($result['result'] == 1) {
+            return PASSWORD_SUCCESS;
         }
 
-        return false;
+        if ($result['reason']) {
+            return array(
+                'code'    => PASSWORD_ERROR,
+                'message' => $result['reason'],
+            );
+        }
+
+        return PASSWORD_ERROR;
     }
 }
diff --git a/program/lib/Roundcube/rcube_vcard.php b/program/lib/Roundcube/rcube_vcard.php
index 798bbab..91815a6 100644
--- a/program/lib/Roundcube/rcube_vcard.php
+++ b/program/lib/Roundcube/rcube_vcard.php
@@ -124,11 +124,6 @@
             $this->raw = self::charset_convert($this->raw, $detected_charset);
         }
 
-        // consider FN empty if the same as the primary e-mail address
-        if ($this->raw['FN'][0][0] == $this->raw['EMAIL'][0][0]) {
-            $this->raw['FN'][0][0] = '';
-        }
-
         // find well-known address fields
         $this->displayname  = $this->raw['FN'][0][0];
         $this->surname      = $this->raw['N'][0][0];
diff --git a/program/lib/Roundcube/rcube_washtml.php b/program/lib/Roundcube/rcube_washtml.php
index 061184e..f3b0720 100644
--- a/program/lib/Roundcube/rcube_washtml.php
+++ b/program/lib/Roundcube/rcube_washtml.php
@@ -174,6 +174,9 @@
     {
         $result = array();
 
+        // Remove unwanted white-space characters so regular expressions below work better
+        $style = preg_replace('/[\n\r\s\t]+/', ' ', $style);
+
         foreach (explode(';', $style) as $declaration) {
             if (preg_match('/^\s*([a-z\-]+)\s*:\s*(.*)\s*$/i', $declaration, $match)) {
                 $cssid = $match[1];
diff --git a/program/localization/index.inc b/program/localization/index.inc
index 38edb73..b1ea836 100644
--- a/program/localization/index.inc
+++ b/program/localization/index.inc
@@ -149,6 +149,7 @@
   'ml' => 'ml_IN',
   'ml_ML' => 'ml_IN',
   'pl' => 'pl_PL',
+  'tr' => 'tr_TR',
   'tw' => 'zh_TW',
   'si' => 'si_LK',
   'sl' => 'sl_SI',
diff --git a/tests/Framework/Washtml.php b/tests/Framework/Washtml.php
index e4e3de4..acc611e 100644
--- a/tests/Framework/Washtml.php
+++ b/tests/Framework/Washtml.php
@@ -182,6 +182,14 @@
 
         $this->assertRegExp('|line-height: 1;|', $washed, "Untouched line-height (#1489917)");
         $this->assertRegExp('|; height: 10px|', $washed, "Fixed height units");
+
+        $html     = "<div style=\"padding: 0px\n   20px;border:1px solid #000;\"></div>";
+        $expected = "<div style=\"padding: 0px 20px; border: 1px solid #000\"></div>";
+
+        $washer = new rcube_washtml;
+        $washed = $washer->wash($html);
+
+        $this->assertTrue(strpos($washed, $expected) !== false, "White-space and new-line characters handling");
     }
 
     /**

--
Gitblit v1.9.1