From 5a6ad209837a8bcca14d4f74541d8ac3ea760341 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 13 Mar 2007 20:39:51 -0400
Subject: [PATCH] Fixed message headers encoding; improved recipient splitting; applied patch for attachment download (#1484198)

---
 program/include/rcube_imap.inc |   25 ++++++++++++++-----------
 1 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index 9f249d5..7ac51fc 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -2454,7 +2454,7 @@
   function _parse_address_list($str)
     {
     // remove any newlines and carriage returns before
-    $a = $this->_explode_quoted_string(',', preg_replace( "/[\r\n]/", " ", $str));
+    $a = $this->_explode_quoted_string('[,;]', preg_replace( "/[\r\n]/", " ", $str));
     $result = array();
     
     foreach ($a as $key => $val)
@@ -2481,17 +2481,20 @@
 
   function _explode_quoted_string($delimiter, $string)
     {
-    $quotes = explode("\"", $string);
-    foreach ($quotes as $key => $val)
-      if (($key % 2) == 1)
-        $quotes[$key] = str_replace($delimiter, "_!@!_", $quotes[$key]);
-        
-    $string = implode("\"", $quotes);
-
-    $result = explode($delimiter, $string);
-    foreach ($result as $key => $val) 
-      $result[$key] = str_replace("_!@!_", $delimiter, $result[$key]);
+    $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 && preg_match("/$delimiter/", $string{$i}))
+      {
+        $result[] = substr($string, $p, $i - $p);
+        $p = $i + 1;
+      }
+    }
     
+    $result[] = substr($string, $p);
     return $result;
     }
   }

--
Gitblit v1.9.1