summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/lib/Roundcube/rcube_mime.php16
-rw-r--r--tests/Framework/Mime.php3
3 files changed, 20 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 8486a9024..d6606eb16 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -56,6 +56,7 @@ CHANGELOG Roundcube Webmail
- 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 14bc48336..f66cf1437 100644
--- a/program/lib/Roundcube/rcube_mime.php
+++ b/program/lib/Roundcube/rcube_mime.php
@@ -394,6 +394,7 @@ class rcube_mime
}
if ($address) {
+ $address = self::fix_email($address);
$result[$key] = array('name' => $name, 'address' => $address);
}
}
@@ -906,4 +907,19 @@ class rcube_mime
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 d47eba896..43773f1a5 100644
--- a/tests/Framework/Mime.php
+++ b/tests/Framework/Mime.php
@@ -44,6 +44,8 @@ class Framework_Mime extends PHPUnit_Framework_TestCase
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 @@ class Framework_Mime extends PHPUnit_Framework_TestCase
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) {