]> Cypherpunks repositories - gostls13.git/commit
encoding/json/v2: reject unquoted dash as a JSON field name
authorJoe Tsai <joetsai@digital-static.net>
Sun, 22 Jun 2025 04:27:09 +0000 (21:27 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 24 Jun 2025 13:41:42 +0000 (06:41 -0700)
commit2e9bb62bfed92ef24a6744fbdc3cf24eb672cd56
treed9c4a66c873fa306149de87d713d69f4555cc377
parented7815726db4a0eb904d7cae2532cde48348d7ff
encoding/json/v2: reject unquoted dash as a JSON field name

In this blog:

https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/

the concern was raised that whenever "-" is combined with other options,
the "-" is intepreted as as a name, rather than an ignored field,
which may go contrary to user expectation.

Static analysis demonstrates that there are ~2k instances of `json:"-,omitempty"
in the wild, where almost all of them intended for the field to be ignored.

To prevent this footgun, reject any tags that has "-," as a prefix
and warn the user to choose one of the reasonable alternatives.

The documentation of json/v2 already suggests `json:"'-'"`
as the recommended way to explicitly specify dash as the name.
See Example_fieldNames for example usages of the single-quoted literal.

Update the v1 json documentation to suggest the same thing.

Updates #71497

Change-Id: I7687b6eecdf82a5d894d057c78a4a90af4f5a6e4
Reviewed-on: https://go-review.googlesource.com/c/go/+/683175
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Reviewed-by: Damien Neil <dneil@google.com>
Auto-Submit: Joseph Tsai <joetsai@digital-static.net>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
src/encoding/json/decode_test.go
src/encoding/json/v2/fields.go
src/encoding/json/v2/fields_test.go
src/encoding/json/v2_decode_test.go
src/encoding/json/v2_encode.go