From 16171245cfb220d5317888b716d69c1fb4e7992b Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Thu, 30 Jan 2020 21:58:50 +1100 Subject: [PATCH] html: add the RawNode NodeType Fixes golang/go#36350 Change-Id: Ia11b65940949b7da996b194d48372bc6219d4baa Reviewed-on: https://go-review.googlesource.com/c/net/+/216800 Reviewed-by: Kunpei Sakai Reviewed-by: Nigel Tao Run-TryBot: Kunpei Sakai TryBot-Result: Gobot Gobot --- html/node.go | 5 +++++ html/render.go | 3 +++ html/render_test.go | 12 +++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/html/node.go b/html/node.go index 633ee15d..1350eef2 100644 --- a/html/node.go +++ b/html/node.go @@ -18,6 +18,11 @@ const ( ElementNode CommentNode DoctypeNode + // RawNode nodes are not returned by the parser, but can be part of the + // Node tree passed to func Render to insert raw HTML (without escaping). + // If so, this package makes no guarantee that the rendered HTML is secure + // (from e.g. Cross Site Scripting attacks) or well-formed. + RawNode scopeMarkerNode ) diff --git a/html/render.go b/html/render.go index 8bf47ede..46879c08 100644 --- a/html/render.go +++ b/html/render.go @@ -134,6 +134,9 @@ func render1(w writer, n *Node) error { } } return w.WriteByte('>') + case RawNode: + _, err := w.WriteString(n.Data) + return err default: return errors.New("html: unknown node type") } diff --git a/html/render_test.go b/html/render_test.go index 11da54b3..1cd439e8 100644 --- a/html/render_test.go +++ b/html/render_test.go @@ -89,6 +89,14 @@ func TestRenderer(t *testing.T) { Type: TextNode, Data: "6", }, + 14: { + Type: CommentNode, + Data: "comm", + }, + 15: { + Type: RawNode, + Data: "7
8
9", + }, } // Build a tree out of those nodes, based on a textual representation. @@ -110,6 +118,8 @@ func TestRenderer(t *testing.T) { 11: `. .
`, 12: `. .
`, 13: `. . "6"`, + 14: `. . ""`, + 15: `. . "7
8
9"`, } if len(nodes) != len(treeAsText) { t.Fatal("len(nodes) != len(treeAsText)") @@ -145,7 +155,7 @@ func TestRenderer(t *testing.T) { want := `0<1

` + `23&4

` + - `5

6` + `5

67
8
9` b := new(bytes.Buffer) if err := Render(b, nodes[0]); err != nil { t.Fatal(err)