From f22c2cefb4c7f8b1a995d5de6f706d49861c473c Mon Sep 17 00:00:00 2001
From: svncommit <devs@roundcube.net>
Date: Tue, 12 May 2009 10:10:30 -0400
Subject: [PATCH] Really, really logout (fixes r2467).

---
 program/include/rcube_mail_mime.php |   32 +++++++-------------------------
 1 files changed, 7 insertions(+), 25 deletions(-)

diff --git a/program/include/rcube_mail_mime.php b/program/include/rcube_mail_mime.php
index 79c80dd..ab93d3a 100644
--- a/program/include/rcube_mail_mime.php
+++ b/program/include/rcube_mail_mime.php
@@ -5,7 +5,7 @@
  | program/include/rcube_mail_mime.php                                   |
  |                                                                       |
  | This file is part of the RoundCube Webmail client                     |
- | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland                 |
+ | Copyright (C) 2007-2009, RoundCube Dev. - Switzerland                 |
  | Licensed under the GNU GPL                                            |
  |                                                                       |
  | PURPOSE:                                                              |
@@ -128,7 +128,7 @@
     {
       // if header contains e-mail addresses
       if (preg_match('/\s<.+@[a-z0-9\-\.]+\.[a-z]+>/U', $hdr_value)) {
-        $chunks = $this->_explode_quoted_string(',', $hdr_value);
+        $chunks = rcube_explode_quoted_string(',', $hdr_value);
       }
       else {
         $chunks = array($hdr_value);
@@ -141,7 +141,7 @@
         $value = trim($value);
 
         //This header contains non ASCII chars and should be encoded.
-        if (preg_match('#[\x80-\xFF]{1}#', $value)) {
+        if (preg_match('/[\x80-\xFF]{1}/', $value)) {
           $suffix = '';
           // Don't encode e-mail address
           if (preg_match('/(.+)\s(<.+@[a-z0-9\-\.]+>)$/Ui', $value, $matches)) {
@@ -160,9 +160,9 @@
             default:
             // quoted-printable encoding has been selected
             $mode = 'Q';
-            $encoded = preg_replace('/([\x2C\x3F\x80-\xFF])/e', "'='.sprintf('%02X', ord('\\1'))", $value);
-            // replace spaces with _
-            $encoded = str_replace(' ', '_', $encoded);
+            // replace ?, =, _ and spaces
+            $encoded = str_replace(array('=','_','?',' '), array('=3D','=5F','=3F','_'), $value);
+            $encoded = preg_replace('/([\x80-\xFF])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded);
           }
 
           $value = '=?' . $params['head_charset'] . '?' . $mode . '?' . $encoded . '?=' . $suffix;
@@ -180,31 +180,13 @@
         }
       }
 
-      $input[$hdr_name] = $hdr_value;
+      $input[$hdr_name] = wordwrap($hdr_value, 990, "\n", true);  // hard limit header length
     }
 
     return $input;
   }
 
 
-  function _explode_quoted_string($delimiter, $string)
-  {
-    $result = array();
-    $strlen = strlen($string);
-    for ($q=$p=$i=0; $i < $strlen; $i++) {
-      if ($string{$i} == "\"" && $string{$i-1} != "\\") {
-        $q = $q ? false : true;
-      }
-      else if (!$q && $string{$i} == $delimiter) {
-        $result[] = substr($string, $p, $i - $p);
-        $p = $i + 1;
-      }
-    }
-    
-    $result[] = substr($string, $p);
-    return $result;
-  }
-  
   /**
    * Provides caching of body of constructed MIME Message to avoid 
    * duplicate construction of message and damage of MIME headers

--
Gitblit v1.9.1