From f01666a6229cfacee45d4131e7dbcb52e40abfea Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 21 Aug 2014 12:08:26 -0400
Subject: [PATCH] Fix handling of email addresses with quoted domain part (#1490040)

---
 CHANGELOG                            |    1 +
 tests/Framework/Mime.php             |    3 +++
 program/lib/Roundcube/rcube_mime.php |   16 ++++++++++++++++
 3 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 8486a90..d6606eb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -56,6 +56,7 @@
 - Fix errors when adding/updating contacts in active search (#1490015)
 - Fix incorrect thumbnail rotation with GD and exif orientation data (#1490029)
 - Fix contacts list update after adding/deleting/moving a contact (#1490028, #1490033)
+- Fix handling of email addresses with quoted domain part (#1490040)
 
 RELEASE 1.0.2
 -------------
diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php
index 14bc483..f66cf14 100644
--- a/program/lib/Roundcube/rcube_mime.php
+++ b/program/lib/Roundcube/rcube_mime.php
@@ -394,6 +394,7 @@
             }
 
             if ($address) {
+                $address      = self::fix_email($address);
                 $result[$key] = array('name' => $name, 'address' => $address);
             }
         }
@@ -906,4 +907,19 @@
         return 'image/' . $type;
     }
 
+    /**
+     * Try to fix invalid email addresses
+     */
+    public static function fix_email($email)
+    {
+        $parts = rcube_utils::explode_quoted_string('@', $email);
+        foreach ($parts as $idx => $part) {
+            // remove redundant quoting (#1490040)
+            if ($part[0] == '"' && preg_match('/^"([a-zA-Z0-9._+=-]+)"$/', $part, $m)) {
+                $parts[$idx] = $m[1];
+            }
+        }
+
+        return implode('@', $parts);
+    }
 }
diff --git a/tests/Framework/Mime.php b/tests/Framework/Mime.php
index d47eba8..43773f1 100644
--- a/tests/Framework/Mime.php
+++ b/tests/Framework/Mime.php
@@ -44,6 +44,8 @@
             23 => '=?UTF-8?B?IlRlc3QsVGVzdCI=?= <test@domain.tld>',
             // invalid, but we do our best to parse correctly
             24 => '"email@test.com" <>',
+            // valid with redundant quoting (#1490040)
+            25 => '"user"@"domain.tld"',
         );
 
         $results = array(
@@ -73,6 +75,7 @@
             22 => array(1, 'John Doe @ SomeBusinessName', 'MAILER-DAEMON'),
             23 => array(1, 'Test,Test', 'test@domain.tld'),
             24 => array(1, '', 'email@test.com'),
+            25 => array(1, '', 'user@domain.tld'),
         );
 
         foreach ($headers as $idx => $header) {

--
Gitblit v1.9.1