Commit d993f666 authored by Robert Speicher's avatar Robert Speicher

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
parent 85def2d6
......@@ -26,13 +26,13 @@ module Gitlab
# => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":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
......
......@@ -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&#39;ll accept good pull requests."
gfm(actual).should == expected
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment