diff --git a/app/helpers/status_messages_helper.rb b/app/helpers/status_messages_helper.rb index 80a20d00b..b999f1a49 100644 --- a/app/helpers/status_messages_helper.rb +++ b/app/helpers/status_messages_helper.rb @@ -19,6 +19,9 @@ module StatusMessagesHelper # next line is important due to XSS! (h is rail's make_html_safe-function) message = h(message).html_safe + message.gsub!(/\[([^\[]+)\]\(([^ ]+) \"(([^&]|(&[^q])|(&q[^u])|(&qu[^o])|(&quo[^t])|("[^;]))+)\"\)/, '\1') + message.gsub!(/\[([^\[]+)\]\(([^ ]+)\)/, '\1') + message.gsub!(/( |^)(www\.[^ ]+\.[^ ])/) do |m| res = "#{$1}http://#{$2}" res.gsub!(/^(\*|_)$/) { |m| "\\#{$1}" } @@ -29,13 +32,16 @@ module StatusMessagesHelper res.gsub!(/(\*|_)/) { |m| "\\#{$1}" } res end - message.gsub!(/(https|http|ftp):\/\/([^ ]+)/) do |m| - res = %{#{$2}} - res.gsub!(/(\*|_)/) { |m| "\\#{$1}" } - res + message.gsub!(/(#{$3}} + res.gsub!(/(\*|_)/) { |m| "\\#{$1}" } + res + end end - # markdown message.gsub!(/([^\\]|^)\*\*(([^*]|([^*]\*[^*]))*[^*\\])\*\*/, '\1\2') message.gsub!(/([^\\]|^)__(([^_]|([^_]_[^_]))*[^_\\])__/, '\1\2') message.gsub!(/([^\\]|^)\*([^*]*[^\\])\*/, '\1\2') diff --git a/spec/helpers/status_messages_helper_spec.rb b/spec/helpers/status_messages_helper_spec.rb index 0f699781b..61ae88be0 100644 --- a/spec/helpers/status_messages_helper_spec.rb +++ b/spec/helpers/status_messages_helper_spec.rb @@ -104,6 +104,18 @@ describe StatusMessagesHelper do end end + describe "links" do + it "should be recognized without title attribute" do + message = "[link text](http://someurl.com) [link text](http://someurl.com)" + make_links(message).should == 'link text link text' + end + + it "should be recognized with title attribute" do + message = '[link text](http://someurl.com "some title") [link text](http://someurl.com "some title")' + make_links(message).should == 'link text link text' + end + end + it "should allow escaping" do message = '*some text* \\*some text* \\**some text* _some text_ \\_some text_ \\__some text_' make_links(message).should == "some text *some text *some text some text _some text _some text"