Aleksander Machniak
2015-02-19 ac93924b1f7b90afea4b92bf352120df67538ea5
program/lib/Roundcube/rcube_mime.php
@@ -366,6 +366,9 @@
                $address = 'MAILER-DAEMON';
                $name    = substr($val, 0, -strlen($m[1]));
            }
            else if (preg_match('/('.$email_rx.')/', $val, $m)) {
                $name = $m[1];
            }
            else {
                $name = $val;
            }
@@ -378,14 +381,20 @@
                }
                if ($decode) {
                    $name = self::decode_header($name, $fallback);
                    // some clients encode addressee name with quotes around it
                    if ($name[0] == '"' && $name[strlen($name)-1] == '"') {
                        $name = substr($name, 1, -1);
                    }
                }
            }
            if (!$address && $name) {
                $address = $name;
                $name    = '';
            }
            if ($address) {
                $address      = self::fix_email($address);
                $result[$key] = array('name' => $name, 'address' => $address);
            }
        }
@@ -514,7 +523,7 @@
                    // remove space-stuffing
                    $line = preg_replace('/^\s/', '', $line);
                    if (isset($text[$last]) && $line
                    if (isset($text[$last]) && $line && !$q_level
                        && $text[$last] != '-- '
                        && $text[$last][strlen($text[$last])-1] == ' '
                    ) {
@@ -881,4 +890,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);
    }
}