]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/json: add cases to TestUnmarshal for fatal syntactic errors
authorJoe Tsai <joetsai@digital-static.net>
Sat, 11 Jan 2025 20:48:33 +0000 (12:48 -0800)
committerGopher Robot <gobot@golang.org>
Mon, 13 Jan 2025 16:27:22 +0000 (08:27 -0800)
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>
src/encoding/json/decode_test.go

index d08d9a4e0aaf933529011b235390ff05edb6f11f..3905a054cedc266f428c607847de283892ab12c9 100644 (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) {