From c9a2fa9db0b3cc9edee0b4ee82d02849b5263766 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 11 Mar 2009 17:43:18 -0400
Subject: [PATCH] Fix charset conversion error logging

---
 program/include/main.inc |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 86fe578..b22be1a 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -186,7 +186,13 @@
   $to = $to==NULL ? strtoupper(RCMAIL_CHARSET) : strtoupper($to);
   $error = false; $conv = null;
 
-  if ($from==$to || $str=='' || empty($from))
+  # RFC1642
+  if ($from == 'UNICODE-1-1-UTF-7')
+    $from = 'UTF-7';
+  if ($to == 'UNICODE-1-1-UTF-7')
+    $to = 'UTF-7';
+
+  if ($from == $to || empty($str) || empty($from))
     return $str;
     
   $aliases = array(
@@ -208,7 +214,6 @@
         return $_iconv;
     }
   }
-
 
   if (is_null($mbstring_loaded))
     $mbstring_loaded = extension_loaded('mbstring');
@@ -232,8 +237,8 @@
         return $out;
     }
   }
-    
-  
+
+  # try to convert with custom classes
   if (class_exists('utf8'))
     $conv = new utf8();
 
@@ -241,6 +246,8 @@
   if ($from == 'UTF-7') {
     if ($_str = utf7_to_utf8($str))
       $str = $_str;
+    else
+      $error = true;
   }
   else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) {
     $str = utf8_encode($str);
@@ -249,7 +256,7 @@
     $conv->loadCharset($from);
     $str = $conv->strToUtf8($str);
   }
-  else if ($from != 'UTF-8') {}
+  else if ($from != 'UTF-8')
     $error = true;
 
   // encode string for output
@@ -273,7 +280,7 @@
       'code' => 500,
       'type' => 'php',
       'file' => __FILE__,
-      'message' => "Could not convert string charset. Make sure iconv is installed or lib/utf8.class is available"
+      'message' => "Could not convert string from $from to $to. Make sure iconv is installed or lib/utf8.class is available"
       ), true, false);
     
     $convert_warning = true;

--
Gitblit v1.9.1