From 020075e12fe4f3bc4fb632909309da97ed537c34 Mon Sep 17 00:00:00 2001 From: mrsdizzie Date: Thu, 7 Mar 2019 14:13:44 -0500 Subject: [PATCH] Remove visitLinksForShortLinks features (#6257) The visitLinksForShortLinks feature would look inside of an tag and run shortLinkProcessorFull on any text, which attempts to create links out of potential 'short links' like [[test]] [[link|example]] etc... This makes no sense because you can't have nested links within an tag. Specifically, the html5 standard says tags can't include interactive content if they contain the href attribute: http://w3c.github.io/html/single-page.html#the-a-element And also defines an element with a href attribute as interactive: http://w3c.github.io/html/single-page.html#interactive-content Therefore you can't really put a link inside of another link. In practice none of this works anyways since browsers won't render it, it would probably be broken if they tried, and it is causing a bug (#4946). No current tests rely on this behavior either. This removes the feature and also explicitly excludes the current visitNodeForShortLinks from looking in tags. --- modules/markup/html.go | 19 +++++-------------- modules/markup/html_test.go | 4 ++++ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/modules/markup/html.go b/modules/markup/html.go index 8ce8740748..dab6d4e8e5 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -171,11 +171,6 @@ type postProcessCtx struct { // processors used by this context. procs []processor - - // if set to true, when an is found, instead of just returning during - // visitNode, it will recursively visit the node exclusively running - // shortLinkProcessorFull with true. - visitLinksForShortLinks bool } // PostProcess does the final required transformations to the passed raw HTML @@ -191,11 +186,10 @@ func PostProcess( ) ([]byte, error) { // create the context from the parameters ctx := &postProcessCtx{ - metas: metas, - urlPrefix: urlPrefix, - isWikiMarkdown: isWikiMarkdown, - procs: defaultProcessors, - visitLinksForShortLinks: true, + metas: metas, + urlPrefix: urlPrefix, + isWikiMarkdown: isWikiMarkdown, + procs: defaultProcessors, } return ctx.postProcess(rawHTML) } @@ -285,9 +279,6 @@ func (ctx *postProcessCtx) visitNode(node *html.Node) { ctx.textNode(node) case html.ElementNode: if node.Data == "a" || node.Data == "code" || node.Data == "pre" { - if node.Data == "a" && ctx.visitLinksForShortLinks { - ctx.visitNodeForShortLinks(node) - } return } for n := node.FirstChild; n != nil; n = n.NextSibling { @@ -302,7 +293,7 @@ func (ctx *postProcessCtx) visitNodeForShortLinks(node *html.Node) { case html.TextNode: shortLinkProcessorFull(ctx, node, true) case html.ElementNode: - if node.Data == "code" || node.Data == "pre" { + if node.Data == "code" || node.Data == "pre" || node.Data == "a" { return } for n := node.FirstChild; n != nil; n = n.NextSibling { diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index f17d00cd67..f430cb04be 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -222,4 +222,8 @@ func TestRender_ShortLinks(t *testing.T) { "[[some/path/Link #.jpg]]", `

`, `

`) + test( + "

[[foobar]]

", + `

[[foobar]]

`, + `

[[foobar]]

`) }