From 9e0fb844a9f1d4b749854a775e4492f9e51e8fbf Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 14 Jul 2015 13:16:20 -0700 Subject: Markdown reader: don't allow bare URI links or autolinks in link label. Added test cases. Closes #2300. --- src/Text/Pandoc/Readers/Markdown.hs | 2 ++ tests/Tests/Readers/Markdown.hs | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 3b5ae0978..b8f5dab60 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -1752,12 +1752,14 @@ dropBrackets = reverse . dropRB . reverse . dropLB bareURL :: MarkdownParser (F Inlines) bareURL = try $ do guardEnabled Ext_autolink_bare_uris + getState >>= guard . stateAllowLinks (orig, src) <- uri <|> emailAddress notFollowedBy $ try $ spaces >> htmlTag (~== TagClose "a") return $ return $ B.link src "" (B.str orig) autoLink :: MarkdownParser (F Inlines) autoLink = try $ do + getState >>= guard . stateAllowLinks char '<' (orig, src) <- uri <|> emailAddress -- in rare cases, something may remain after the uri parser diff --git a/tests/Tests/Readers/Markdown.hs b/tests/Tests/Readers/Markdown.hs index a041620e7..17bfd332e 100644 --- a/tests/Tests/Readers/Markdown.hs +++ b/tests/Tests/Readers/Markdown.hs @@ -194,7 +194,7 @@ tests = [ testGroup "inline code" =?> para (link "/there.0" "" "hi") ] , testGroup "bare URIs" - (map testBareLink bareLinkTests) + (map testBareLink bareLinkTests) , testGroup "autolinks" [ "with unicode dash following" =: "\8212" =?> para (autolink "http://foo.bar" <> @@ -203,6 +203,17 @@ tests = [ testGroup "inline code" "" =?> para (text "") ] + , testGroup "links" + [ "no autolink inside link" =: + "[](url)" =?> + para (link "url" "" (text "")) + , "no inline link inside link" =: + "[[a](url2)](url)" =?> + para (link "url" "" (text "[a](url2)")) + , "no bare URI inside link" =: + "[https://example.org(](url)" =?> + para (link "url" "" (text "https://example.org(")) + ] , testGroup "Headers" [ "blank line before header" =: "\n# Header\n" -- cgit v1.2.3