From: Joe Tsai Date: Sat, 11 Jan 2025 20:48:33 +0000 (-0800) Subject: encoding/json: add cases to TestUnmarshal for fatal syntactic errors X-Git-Tag: go1.24rc3~2^2~49 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=47a56b2b6d;p=gostls13.git 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 Reviewed-by: Ian Lance Taylor Auto-Submit: Joseph Tsai Reviewed-by: Michael Knyszek --- diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go index d08d9a4e0a..3905a054ce 100644 --- a/src/encoding/json/decode_test.go +++ b/src/encoding/json/decode_test.go @@ -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) {