]> Cypherpunks repositories - gostls13.git/commit
encoding/json: fix decoding of null into Unmarshaler, TextUnmarshaler
authorRuss Cox <rsc@golang.org>
Wed, 12 Oct 2016 20:54:02 +0000 (16:54 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 17 Oct 2016 15:21:33 +0000 (15:21 +0000)
commitf444b48fe419c2d19b7b9a89faad30f0e8b0e474
tree19fe013c66767936dbdd1bdde6becb96a9b1e8fe
parentc6185aa63217c84a1a73c578c155e7d4dec6cec8
encoding/json: fix decoding of null into Unmarshaler, TextUnmarshaler

1. Define behavior for Unmarshal of JSON null into Unmarshaler and
TextUnmarshaler. Specifically, an Unmarshaler will be given the
literal null and can decide what to do (because otherwise
json.RawMessage is impossible to implement), and a TextUnmarshaler
will be skipped over (because there is no text to unmarshal), like
most other inappropriate types. Document this in Unmarshal, with a
reminder in UnmarshalJSON about handling null.

2. Test all this.

3. Fix the TextUnmarshaler case, which was returning an unmarshalling
error, to match the definition.

4. Fix the error that had been used for the TextUnmarshaler, since it
was claiming that there was a JSON string when in fact the problem was
NOT having a string.

5. Adjust time.Time and big.Int's UnmarshalJSON to ignore null, as is
conventional.

Fixes #9037.

Change-Id: If78350414eb8dda712867dc8f4ca35a9db041b0c
Reviewed-on: https://go-review.googlesource.com/30944
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/big/intmarsh.go
src/encoding/json/decode.go
src/encoding/json/decode_test.go
src/math/big/intmarsh.go
src/time/time.go