lib/ur: Zero our the value before unmarshal (#6790)

* lib/ur: Zero our the value before unmarshal

* Comment

* Complete rewrite
This commit is contained in:
Audrius Butkevicius 2020-06-23 21:23:32 +01:00 committed by GitHub
parent 78d294f78c
commit bb76311ec6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 0 deletions

View File

@ -379,6 +379,10 @@ func (r Report) Value() (driver.Value, error) {
}
func (r *Report) Scan(value interface{}) error {
// Zero out the previous value
// JSON un-marshaller does not touch fields that are not in the payload, so we carry over values from a previous
// scan.
*r = Report{}
b, ok := value.([]byte)
if !ok {
return errors.New("type assertion to []byte failed")

View File

@ -128,3 +128,27 @@ func expect(t *testing.T, since int, b interface{}) {
t.Errorf("%#v != %#v", x, b)
}
}
func TestMarshallingBehaviour(t *testing.T) {
r := Report{}
if err := r.Scan([]byte(`{"folderUses":{"sendonly": 100}}`)); err != nil {
t.Fatal(err)
}
if r.FolderUses.SendOnly != 100 {
t.Errorf("%d != 100", r.FolderUses.SendOnly)
}
if err := r.Scan([]byte(`{"folderUses":{"sendreceive": 200}}`)); err != nil {
t.Fatal(err)
}
if r.FolderUses.SendReceive != 200 {
t.Errorf("%d != 200", r.FolderUses.SendReceive)
}
if r.FolderUses.SendOnly != 0 {
t.Errorf("%d != 0", r.FolderUses.SendOnly)
}
}