Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

html/template: Tree is only updated after Execute is called #43064

Open
vktec opened this issue Dec 8, 2020 · 3 comments
Open

html/template: Tree is only updated after Execute is called #43064

vktec opened this issue Dec 8, 2020 · 3 comments

Comments

@vktec
Copy link

@vktec vktec commented Dec 8, 2020

What version of Go are you using (go version)?

$ go version
go version go1.15.5 linux/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/vktec/.cache/go-build"
GOENV="/home/vktec/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/vktec/.go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/vktec/.go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build234409553=/tmp/go-build -gno-record-gcc-switches"

What did you do?

tmpl := template.Must(template.New("").Parse(`{{.}}`))
fmt.Println(tmpl.Tree.Root)
tmpl.Execute(ioutil.Discard, "")
fmt.Println(tmpl.Tree.Root)

https://play.golang.org/p/Tt61uh_jIRf

What did you expect to see?

Before Execute is called, the Tree should already have been "updated to be HTML-safe", as implied by the documentation for that field:

The underlying template's parse tree, updated to be HTML-safe.

What did you see instead?

The Tree is only updated after Execute is called.

@vktec
Copy link
Author

@vktec vktec commented Dec 8, 2020

It's possible this is intended. If so, I'd like to request the documentation be updated to make that clearer, and the internal escape method be made public so the tree can be updated without having to call Execute.

@toothrot toothrot added this to the Backlog milestone Dec 8, 2020
@toothrot
Copy link
Contributor

@toothrot toothrot commented Dec 8, 2020

/cc @empijei

@empijei
Copy link
Contributor

@empijei empijei commented Dec 16, 2020

This is intended as escaping needs to be lazily evaluated.

We should probably update the doc to reflect this behavior. Would you like to try and send a CL to do so?

Partially related: #39807

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants