From d993f666423744d213d7cce063b48e71fa751d43 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 13 Sep 2012 15:20:00 -0400 Subject: [PATCH] Fix HTML entities being parsed in GFM Also fixes the spec so that it actually tests the thing it says it's testing. Hooray! Closes #1308 --- lib/gitlab/markdown.rb | 22 +++++++++++++++------ spec/helpers/gitlab_markdown_helper_spec.rb | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb index 4fc0c392cac..0a467a8d9c9 100644 --- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -26,13 +26,13 @@ module Gitlab # => "\":trollface:\" module Markdown REFERENCE_PATTERN = %r{ - ([^\w&;])? # Prefix (1) + (\W)? # Prefix (1) ( # Reference (2) @([\w\._]+) # User name (3) |[#!$](\d+) # Issue/MR/Snippet ID (4) |([\h]{6,40}) # Commit ID (5) ) - ([^\w&;])? # Suffix (6) + (\W)? # Suffix (6) }x.freeze EMOJI_PATTERN = %r{(:(\S+):)}.freeze @@ -84,6 +84,13 @@ module Gitlab # # Returns parsed text def parse(text) + parse_references(text) if @project + parse_emoji(text) + + text + end + + def parse_references(text) # parse reference links text.gsub!(REFERENCE_PATTERN) do |match| prefix = $1 || '' @@ -91,13 +98,18 @@ module Gitlab identifier = $3 || $4 || $5 suffix = $6 || '' - if ref_link = reference_link(reference, identifier) + # Avoid HTML entities + if prefix.ends_with?('&') || suffix.starts_with?(';') + match + elsif ref_link = reference_link(reference, identifier) prefix + ref_link + suffix else match end - end if @project + end + end + def parse_emoji(text) # parse emoji text.gsub!(EMOJI_PATTERN) do |match| if valid_emoji?($2) @@ -106,8 +118,6 @@ module Gitlab match end end - - text end # Private: Checks if an emoji icon exists in the image asset directory diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 4dd3802a5c1..0af331424f5 100644 --- a/spec/helpers/gitlab_markdown_helper_spec.rb +++ b/spec/helpers/gitlab_markdown_helper_spec.rb @@ -31,6 +31,7 @@ describe GitlabMarkdownHelper do end it "should not touch HTML entities" do + @project.issues.stub(:where).with(id: '39').and_return([issue]) actual = expected = "We'll accept good pull requests." gfm(actual).should == expected end -- GitLab