mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
encoding/json: fix handling of null with ,string fields
Fixes #8587. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews, iant, r https://golang.org/cl/152270044
This commit is contained in:
parent
18172c42ff
commit
7b2b8edee6
2 changed files with 50 additions and 11 deletions
|
|
@ -1070,18 +1070,25 @@ func TestEmptyString(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// Test that the returned error is non-nil when trying to unmarshal null string into int, for successive ,string option
|
||||
// Issue 7046
|
||||
// Test that a null for ,string is not replaced with the previous quoted string (issue 7046).
|
||||
// It should also not be an error (issue 2540, issue 8587).
|
||||
func TestNullString(t *testing.T) {
|
||||
type T struct {
|
||||
A int `json:",string"`
|
||||
B int `json:",string"`
|
||||
A int `json:",string"`
|
||||
B int `json:",string"`
|
||||
C *int `json:",string"`
|
||||
}
|
||||
data := []byte(`{"A": "1", "B": null}`)
|
||||
data := []byte(`{"A": "1", "B": null, "C": null}`)
|
||||
var s T
|
||||
s.B = 1
|
||||
s.C = new(int)
|
||||
*s.C = 2
|
||||
err := Unmarshal(data, &s)
|
||||
if err == nil {
|
||||
t.Fatalf("expected error; got %v", s)
|
||||
if err != nil {
|
||||
t.Fatalf("Unmarshal: %v")
|
||||
}
|
||||
if s.B != 1 || s.C != nil {
|
||||
t.Fatalf("after Unmarshal, s.B=%d, s.C=%p, want 1, nil", s.B, s.C)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue