From 0f5dee00df59dd2f97c36aa0fc3aca062f9d223a Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 06 Jun 2012 03:22:15 -0400
Subject: [PATCH] Decode header value in rcube_mime::get() by default (#1488511)

---
 CHANGELOG                                |    1 +
 program/include/rcube_mime.php           |   24 ++++++++++++++++++++----
 program/include/rcube_message_header.php |    9 ++++++---
 3 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 6f6ee88..576e07f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Decode header value in rcube_mime::get() by default (#1488511)
 - Fix errors with enabled PHP magic_quotes_sybase option (#1488506)
 - Fix SQL query for contacts listing on MS SQL Server (#1488505)
 - Update to TinyMCE 3.5.2
diff --git a/program/include/rcube_message_header.php b/program/include/rcube_message_header.php
index f2f9167..378fb98 100644
--- a/program/include/rcube_message_header.php
+++ b/program/include/rcube_message_header.php
@@ -205,15 +205,18 @@
     /**
      * Returns header value
      */
-    public function get($name)
+    public function get($name, $decode = true)
     {
         $name = strtolower($name);
 
         if (isset($this->obj_headers[$name])) {
-            return $this->{$this->obj_headers[$name]};
+            $value = $this->{$this->obj_headers[$name]};
+        }
+        else {
+            $value = $this->others[$name];
         }
 
-        return $this->others[$name];
+        return $decode ? rcube_mime::decode_header($value, $this->charset) : $value;
     }
 
     /**
diff --git a/program/include/rcube_mime.php b/program/include/rcube_mime.php
index 9a594f3..53655a9 100644
--- a/program/include/rcube_mime.php
+++ b/program/include/rcube_mime.php
@@ -42,9 +42,25 @@
         if ($default_charset) {
             self::$default_charset = $default_charset;
         }
-        else {
-            self::$default_charset = rcube::get_instance()->config->get('default_charset', RCMAIL_CHARSET);
+    }
+
+
+    /**
+     * Returns message/object character set name
+     *
+     * @return string Characted set name
+     */
+    public static function get_charset()
+    {
+        if (self::$default_charset) {
+            return self::$default_charset;
         }
+
+        if ($charset = rcube::get_instance()->config->get('default_charset')) {
+            return $charset;
+        }
+
+        return RCMAIL_CHARSET;
     }
 
 
@@ -89,7 +105,7 @@
         if ($part->ctype_parameters['charset'])
             $struct->charset = $part->ctype_parameters['charset'];
 
-        $part_charset = $struct->charset ? $struct->charset : self::$default_charset;
+        $part_charset = $struct->charset ? $struct->charset : self::get_charset();
 
         // determine filename
         if (($filename = $part->d_parameters['filename']) || ($filename = $part->ctype_parameters['name'])) {
@@ -183,7 +199,7 @@
      */
     public static function decode_mime_string($input, $fallback = null)
     {
-        $default_charset = !empty($fallback) ? $fallback : self::$default_charset;
+        $default_charset = !empty($fallback) ? $fallback : self::get_charset();
 
         // rfc: all line breaks or other characters not found
         // in the Base64 Alphabet must be ignored by decoding software

--
Gitblit v1.9.1