From e8ab3d96bd4340fb262e5d83a2e5988f47bba3b0 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Tue, 12 Apr 2016 05:53:04 -0400 Subject: [PATCH] Fix converting mail addresses with @www. into mailto links (#5197) --- CHANGELOG | 1 + tests/Framework/StringReplacer.php | 1 + program/lib/Roundcube/rcube_string_replacer.php | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2785582..33deb82 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -35,6 +35,7 @@ - Fix so contactlist_fields option can be set via config file - Fix so SPECIAL-USE assignments are forced only until user sets special folders (#4782) - Fix performance in reverting order of THREAD result +- Fix converting mail addresses with @www. into mailto links (#5197) RELEASE 1.2-beta ---------------- diff --git a/program/lib/Roundcube/rcube_string_replacer.php b/program/lib/Roundcube/rcube_string_replacer.php index eb281ee..284d585 100644 --- a/program/lib/Roundcube/rcube_string_replacer.php +++ b/program/lib/Roundcube/rcube_string_replacer.php @@ -34,6 +34,7 @@ protected $options = array(); protected $linkrefs = array(); protected $urls = array(); + protected $noword = '[^\w@.#-]'; function __construct($options = array()) @@ -44,10 +45,13 @@ $url1 = '.:;,'; $url2 = 'a-zA-Z0-9%=#$@+?|!&\\/_~\\[\\]\\(\\){}\*\x80-\xFE-'; + // Supported link prefixes + $link_prefix = "([\w]+:\/\/|{$this->noword}[Ww][Ww][Ww]\.|^[Ww][Ww][Ww]\.)"; + $this->options = $options; $this->linkref_index = '/\[([^\]#]+)\](:?\s*##str_replacement_(\d+)##)/'; $this->linkref_pattern = '/\[([^\]#]+)\]/'; - $this->link_pattern = "/([\w]+:\/\/|\W[Ww][Ww][Ww]\.|^[Ww][Ww][Ww]\.)($utf_domain([$url1]*[$url2]+)*)/"; + $this->link_pattern = "/$link_prefix($utf_domain([$url1]*[$url2]+)*)/"; $this->mailto_pattern = "/(" ."[-\w!\#\$%&\'*+~\/^`|{}=]+(?:\.[-\w!\#\$%&\'*+~\/^`|{}=]+)*" // local-part ."@$utf_domain" // domain-part @@ -91,7 +95,7 @@ if (preg_match('!^(http|ftp|file)s?://!i', $scheme)) { $url = $matches[1] . $matches[2]; } - else if (preg_match('/^(\W*)(www\.)$/i', $matches[1], $m)) { + else if (preg_match("/^({$this->noword}*)(www\.)$/i", $matches[1], $m)) { $url = $m[2] . $matches[2]; $url_prefix = 'http://'; $prefix = $m[1]; diff --git a/tests/Framework/StringReplacer.php b/tests/Framework/StringReplacer.php index 7d9600a..543601d 100644 --- a/tests/Framework/StringReplacer.php +++ b/tests/Framework/StringReplacer.php @@ -39,6 +39,7 @@ array('https://github.com/a/b/compare/3a0f82...1f4b2a after', '<a href="https://github.com/a/b/compare/3a0f82...1f4b2a">https://github.com/a/b/compare/3a0f82...1f4b2a</a> after'), array('http://<test>', 'http://<test>'), array('http://', 'http://'), + array('test@www.test', '<a href="mailto:test@www.test">test@www.test</a>'), array('1@1.com www.domain.tld', '<a href="mailto:1@1.com">1@1.com</a> <a href="http://www.domain.tld">www.domain.tld</a>'), array(' www.domain.tld ', ' <a href="http://www.domain.tld">www.domain.tld</a> '), array(' www.domain.tld/#!download|856p1|2 ', ' <a href="http://www.domain.tld/#!download|856p1|2">www.domain.tld/#!download|856p1|2</a> '), -- Gitblit v1.9.1