Aleksander Machniak
2014-08-21 f01666a6229cfacee45d4131e7dbcb52e40abfea
Fix handling of email addresses with quoted domain part (#1490040)
3 files modified
20 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_mime.php 16 ●●●●● patch | view | raw | blame | history
tests/Framework/Mime.php 3 ●●●●● patch | view | raw | blame | history
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
-------------
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);
    }
}
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) {