From f06aa8058b7e32ba32d4551074b6e0b8a300f751 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Mon, 21 Oct 2013 15:02:40 -0400
Subject: [PATCH] Bump version after security fix

---
 program/include/rcube_charset.php |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/program/include/rcube_charset.php b/program/include/rcube_charset.php
index e52e82e..2c8d3a0 100644
--- a/program/include/rcube_charset.php
+++ b/program/include/rcube_charset.php
@@ -78,7 +78,7 @@
      * @param  int    Level of the error
      * @param  string Error message
      */
-    public function error_handler($errno, $errstr)
+    public static function error_handler($errno, $errstr)
     {
         throw new ErrorException($errstr, 0, $errno);
     }
@@ -89,7 +89,7 @@
      * Sometimes charset string is malformed, there are also charset aliases 
      * but we need strict names for charset conversion (specially utf8 class)
      *
-     * @param  string Input charset name
+     * @param string $input Input charset name
      *
      * @return string The validated charset name
      */
@@ -182,9 +182,15 @@
         static $mbstring_list   = null;
         static $conv            = null;
 
-        $to   = empty($to) ? strtoupper(RCMAIL_CHARSET) : self::parse($to);
+        $to   = empty($to) ? strtoupper(RCMAIL_CHARSET) : $to;
         $from = self::parse($from);
 
+        // It is a common case when UTF-16 charset is used with US-ASCII content (#1488654)
+        // In that case we can just skip the conversion (use UTF-8)
+        if ($from == 'UTF-16' && !preg_match('/[^\x00-\x7F]/', $str)) {
+            $from = 'UTF-8';
+        }
+
         if ($from == $to || empty($str) || empty($from)) {
             return $str;
         }

--
Gitblit v1.9.1