diff options
| author | Damien Neil <dneil@google.com> | 2025-12-08 13:54:15 -0800 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-12-11 09:35:35 -0800 |
| commit | 9de6468701f4def1bbdc737e8ad1327f2cfaecc8 (patch) | |
| tree | 0946ece2e78b75007a42f2cff0df50365f3d8660 /src/encoding/json | |
| parent | 00642ee23b614d5314604b6b4d25c671f82c26b2 (diff) | |
| download | go-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')
| -rw-r--r-- | src/encoding/json/jsontext/decode_test.go | 4 | ||||
| -rw-r--r-- | src/encoding/json/jsontext/token.go | 31 |
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] } |
