Skip to content

Commit 17fc60a

Browse files
committed
fix
1 parent e94f8d5 commit 17fc60a

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

modules/markup/html.go

+9
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,15 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node) *html.Nod
329329
return visitNodeImg(ctx, node)
330330
} else if node.Data == "video" {
331331
return visitNodeVideo(ctx, node)
332+
} else if node.Data == "script" || node.Data == "style" {
333+
// to match GitHub's behavior: some tags are rendered as text content
334+
// and for unclosed tags, render the text content as much as possible
335+
sb := &strings.Builder{}
336+
_ = html.Render(sb, node)
337+
newNode := &html.Node{Type: html.RawNode, Data: html.EscapeString(sb.String())}
338+
node.Parent.InsertBefore(newNode, node)
339+
node.Parent.RemoveChild(node)
340+
return newNode.NextSibling
332341
}
333342

334343
if node.Data == "a" {

modules/markup/html_test.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ func Test_ParseClusterFuzz(t *testing.T) {
469469
assert.NotContains(t, res.String(), "<html")
470470
}
471471

472-
func TestPostProcess_RenderDocument(t *testing.T) {
472+
func TestPostProcess(t *testing.T) {
473473
setting.StaticURLPrefix = markup.TestAppURL // can't run standalone
474474
defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableAdditionalAttributes, true)()
475475

@@ -480,7 +480,7 @@ func TestPostProcess_RenderDocument(t *testing.T) {
480480
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(res.String()))
481481
}
482482

483-
// Issue index shouldn't be post processing in a document.
483+
// Issue index shouldn't be post-processing in a document.
484484
test(
485485
"#1",
486486
"#1")
@@ -490,7 +490,7 @@ func TestPostProcess_RenderDocument(t *testing.T) {
490490
"go-gitea/gitea#12345",
491491
`<a href="/go-gitea/gitea/issues/12345" class="ref-issue">go-gitea/gitea#12345</a>`)
492492

493-
// Test that other post processing still works.
493+
// Test that other post-processing still works.
494494
test(
495495
":gitea:",
496496
`<span class="emoji" aria-label="gitea"><img alt=":gitea:" src="`+setting.StaticURLPrefix+`/assets/img/emoji/gitea.png"/></span>`)
@@ -499,6 +499,11 @@ func TestPostProcess_RenderDocument(t *testing.T) {
499499
`Some text with <span class="emoji" aria-label="grinning face with smiling eyes">😄</span> in the middle`)
500500
test("http://localhost:3000/person/repo/issues/4#issuecomment-1234",
501501
`<a href="http://localhost:3000/person/repo/issues/4#issuecomment-1234" class="ref-issue">person/repo#4 (comment)</a>`)
502+
503+
// special tags, GitHub's behavior
504+
test("<script>a</script><style>b</style>", `&lt;script&gt;a&lt;/script&gt;&lt;style&gt;b&lt;/style&gt;`)
505+
// unclosed tags, output as text content as much as possible
506+
test("<script>a", `&lt;script&gt;a&lt;/body&gt;&lt;/html&gt;&lt;/script&gt;`)
502507
}
503508

504509
func TestIssue16020(t *testing.T) {

0 commit comments

Comments
 (0)