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