Skip to content

Commit

Permalink
fix: decode options in compat mode
Browse files Browse the repository at this point in the history
  • Loading branch information
liuq19 committed Aug 31, 2023
1 parent 9fff59a commit b680c60
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
4 changes: 2 additions & 2 deletions decoder/decoder_compat.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,10 @@ func (self *Decoder) CheckTrailings() error {
func (self *Decoder) Decode(val interface{}) error {
r := bytes.NewBufferString(self.s)
dec := json.NewDecoder(r)
if (self.f | uint64(OptionUseNumber)) != 0 {
if (self.f & uint64(OptionUseNumber)) != 0 {
dec.UseNumber()
}
if (self.f | uint64(OptionDisableUnknown)) != 0 {
if (self.f & uint64(OptionDisableUnknown)) != 0 {
dec.DisallowUnknownFields()
}
return dec.Decode(val)
Expand Down
30 changes: 30 additions & 0 deletions decoder/decoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,36 @@ func TestDecodeCorrupt(t *testing.T) {
}
}

func TestDecodeOption(t *testing.T) {
var s string
var d *Decoder
var out interface{}
var out2 struct {}
var err error

s = "123"
d = NewDecoder(s)
d.SetOptions(OptionUseNumber);
err = d.Decode(&out)
assert.NoError(t, err)
assert.Equal(t, out.(json.Number), json.Number("123"))

d = NewDecoder(s)
err = d.Decode(&out)
assert.NoError(t, err)
assert.Equal(t, out.(float64), float64(123))

s = `{"un": 123}`
d = NewDecoder(s)
d.SetOptions(OptionDisableUnknown);
err = d.Decode(&out2)
assert.Error(t, err)

d = NewDecoder(s)
err = d.Decode(&out2)
assert.NoError(t, err)
}

func decode(s string, v interface{}, copy bool) (int, error) {
d := NewDecoder(s)
if copy {
Expand Down

0 comments on commit b680c60

Please sign in to comment.