encoding/json: add cases to TestUnmarshal for fatal syntactic errors

The presence of a syntax error in the input immediately unmarshaling
before unmarshaling into the underlying value.
Otherwise, semantic errors are generally lazily reported and
allow unmarshaling to continue on.

Change-Id: Icf1cfc684e415312d9c8bf739c396ede15299d7d
Reviewed-on: https://go-review.googlesource.com/c/go/+/642295
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Joseph Tsai <joetsai@digital-static.net>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
Joe Tsai 2025-01-11 12:48:33 -08:00 committed by Gopher Robot
parent 7bb192a1c5
commit 47a56b2b6d

View file

@ -1170,6 +1170,23 @@ var unmarshalTests = []struct {
N Number `json:",string"`
}{"5"},
},
// Verify that syntactic errors are immediately fatal,
// while semantic errors are lazily reported
// (i.e., allow processing to continue).
{
CaseName: Name(""),
in: `[1,2,true,4,5}`,
ptr: new([]int),
err: &SyntaxError{msg: "invalid character '}' after array element", Offset: 14},
},
{
CaseName: Name(""),
in: `[1,2,true,4,5]`,
ptr: new([]int),
out: []int{1, 2, 0, 4, 5},
err: &UnmarshalTypeError{Value: "bool", Type: reflect.TypeFor[int](), Offset: 9},
},
}
func TestMarshal(t *testing.T) {