-
Notifications
You must be signed in to change notification settings - Fork 18.9k
encoding/json: string option (struct tag) on string field with SetEscapeHTML(false) escapes anyway #34154
Copy link
Copy link
Closed
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.
Milestone
Description
If using encoding/json.NewEncoder with SetEscapeHTML(false) an a field, that has the string option in the struct tags set, the HTML content gets escaped anyways.
What version of Go are you using (go version)?
$ go version go version go1.12.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 GOARCH="amd64" GOBIN="" GOCACHE="/home/lubr/.cache/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/home/lubr/go" GOPROXY="" GORACE="" GOROOT="/home/lubr/.gvm/versions/go1.12.5.linux.amd64" GOTMPDIR="" GOTOOLDIR="/home/lubr/.gvm/versions/go1.12.5.linux.amd64/pkg/tool/linux_amd64" GCCGO="gccgo" 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-build368255501=/tmp/go-build -gno-record-gcc-switches"
What did you do?
package main
import (
"encoding/json"
"os"
)
type Foo struct {
Bar string `json:"bar,string"`
}
func main() {
j := Foo{
Bar: `<html>foobar</html>`,
}
e := json.NewEncoder(os.Stdout)
e.SetEscapeHTML(false)
_ = e.Encode(j)
}What did you expect to see?
$ go run main.go
{"bar":"\"<html>foobar</html>\""}
What did you see instead?
$ go run main.go
{"bar":"\"\\u003chtml\\u003efoobar\\u003c/html\\u003e\""}
#34127 does fix this issue
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.