aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/json/jsontext
diff options
context:
space:
mode:
authorDamien Neil <dneil@google.com>2025-12-08 13:54:15 -0800
committerGopher Robot <gobot@golang.org>2025-12-11 09:35:35 -0800
commit9de6468701f4def1bbdc737e8ad1327f2cfaecc8 (patch)
tree0946ece2e78b75007a42f2cff0df50365f3d8660 /src/encoding/json/jsontext
parent00642ee23b614d5314604b6b4d25c671f82c26b2 (diff)
downloadgo-9de6468701f4def1bbdc737e8ad1327f2cfaecc8.tar.xz
json/jsontext: normalize all invalid Kinds to 0
For #75431 Change-Id: Iafefe952d3c1837e2f4c8c24cae96945d9e5abbf Reviewed-on: https://go-review.googlesource.com/c/go/+/728380 Reviewed-by: Joseph Tsai <joetsai@digital-static.net> Auto-Submit: Damien Neil <dneil@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/encoding/json/jsontext')
-rw-r--r--src/encoding/json/jsontext/decode_test.go4
-rw-r--r--src/encoding/json/jsontext/token.go31
2 files changed, 28 insertions, 7 deletions
diff --git a/src/encoding/json/jsontext/decode_test.go b/src/encoding/json/jsontext/decode_test.go
index 209ff65ec8..3f48cae2d1 100644
--- a/src/encoding/json/jsontext/decode_test.go
+++ b/src/encoding/json/jsontext/decode_test.go
@@ -193,8 +193,8 @@ var decoderErrorTestdata = []struct {
name: jsontest.Name("InvalidStart"),
in: ` #`,
calls: []decoderMethodCall{
- {'#', zeroToken, newInvalidCharacterError("#", "at start of value").withPos(" ", ""), ""},
- {'#', zeroValue, newInvalidCharacterError("#", "at start of value").withPos(" ", ""), ""},
+ {0, zeroToken, newInvalidCharacterError("#", "at start of value").withPos(" ", ""), ""},
+ {0, zeroValue, newInvalidCharacterError("#", "at start of value").withPos(" ", ""), ""},
},
}, {
name: jsontest.Name("StreamN0"),
diff --git a/src/encoding/json/jsontext/token.go b/src/encoding/json/jsontext/token.go
index e78c3f84d8..caf0174923 100644
--- a/src/encoding/json/jsontext/token.go
+++ b/src/encoding/json/jsontext/token.go
@@ -518,10 +518,31 @@ func (k Kind) String() string {
}
}
-// normalize coalesces all possible starting characters of a number as just '0'.
+var normKind = [256]Kind{
+ 'n': 'n',
+ 'f': 'f',
+ 't': 't',
+ '"': '"',
+ '{': '{',
+ '}': '}',
+ '[': '[',
+ ']': ']',
+ '-': '0',
+ '0': '0',
+ '1': '0',
+ '2': '0',
+ '3': '0',
+ '4': '0',
+ '5': '0',
+ '6': '0',
+ '7': '0',
+ '8': '0',
+ '9': '0',
+}
+
+// normalize coalesces all possible starting characters of a number as just '0',
+// and converts all invalid kinds to 0.
func (k Kind) normalize() Kind {
- if k == '-' || ('0' <= k && k <= '9') {
- return '0'
- }
- return k
+ // A lookup table keeps the inlining cost as low as possible.
+ return normKind[k]
}