diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-06-17 19:27:03 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-06-17 19:27:03 +0000 |
commit | d991e46f122d084c9465073256e7750b24898d49 (patch) | |
tree | 5b6f9b5938ebb237dbb714c95ed0223135e3a27e | |
parent | 3c95f761e610a1d5957ca9f96708958ba80565ab (diff) | |
download | redmine-d991e46f122d084c9465073256e7750b24898d49.tar.gz redmine-d991e46f122d084c9465073256e7750b24898d49.zip |
Fixed: urls containing @ are parsed as email adress by the wiki formatter (#1456).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1559 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | lib/redmine/wiki_formatting.rb | 10 | ||||
-rw-r--r-- | test/unit/helpers/application_helper_test.rb | 3 |
2 files changed, 9 insertions, 4 deletions
diff --git a/lib/redmine/wiki_formatting.rb b/lib/redmine/wiki_formatting.rb index 88a858b04..6c8eebbbc 100644 --- a/lib/redmine/wiki_formatting.rb +++ b/lib/redmine/wiki_formatting.rb @@ -152,12 +152,16 @@ module Redmine end end end - + # Turns all email addresses into clickable links (code from Rails). def inline_auto_mailto(text) text.gsub!(/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do - text = $1 - %{<a href="mailto:#{$1}" class="email">#{text}</a>} + mail = $1 + if text.match(/<a\b[^>]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/) + mail + else + %{<a href="mailto:#{mail}" class="email">#{mail}</a>} + end end end end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index c6afdda0e..9504a8c79 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -34,7 +34,8 @@ class ApplicationHelperTest < HelperTestCase 'http://foo.bar/foo.bar#foo.bar.' => '<a class="external" href="http://foo.bar/foo.bar#foo.bar">http://foo.bar/foo.bar#foo.bar</a>.', 'www.foo.bar' => '<a class="external" href="http://www.foo.bar">www.foo.bar</a>', 'http://foo.bar/page?p=1&t=z&s=' => '<a class="external" href="http://foo.bar/page?p=1&t=z&s=">http://foo.bar/page?p=1&t=z&s=</a>', - 'http://foo.bar/page#125' => '<a class="external" href="http://foo.bar/page#125">http://foo.bar/page#125</a>' + 'http://foo.bar/page#125' => '<a class="external" href="http://foo.bar/page#125">http://foo.bar/page#125</a>', + 'http://foo@www.bar.com' => '<a class="external" href="http://foo@www.bar.com">http://foo@www.bar.com</a>', } to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } end |