Skip to content

Commit

Permalink
fix: unmarshal from number to string with incorrect error message (#3625
Browse files Browse the repository at this point in the history
)
  • Loading branch information
kevwan authored Oct 15, 2023
1 parent b731aa3 commit 4f22034
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
9 changes: 5 additions & 4 deletions core/mapping/unmarshaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ import (
)

const (
defaultKeyName = "key"
delimiter = '.'
ignoreKey = "-"
defaultKeyName = "key"
delimiter = '.'
ignoreKey = "-"
numberTypeString = "number"
)

var (
Expand Down Expand Up @@ -634,7 +635,7 @@ func (u *Unmarshaler) processFieldPrimitiveWithJSONNumber(fieldType reflect.Type

target.SetFloat(fValue)
default:
return newTypeMismatchErrorWithHint(fullName, typeKind.String(), value.Type().String())
return newTypeMismatchErrorWithHint(fullName, typeKind.String(), numberTypeString)
}

SetValue(fieldType, value, target)
Expand Down
2 changes: 1 addition & 1 deletion core/mapping/unmarshaler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5490,7 +5490,7 @@ func TestUnmarshalerProcessFieldPrimitiveWithJSONNumber(t *testing.T) {
err := m.processFieldPrimitiveWithJSONNumber(fieldType, value.Elem(), v,
&fieldOptionsWithContext{}, "field")
assert.Error(t, err)
assert.Equal(t, `type mismatch for field "field", expect "string", actual "int"`, err.Error())
assert.Equal(t, `type mismatch for field "field", expect "string", actual "number"`, err.Error())
})

t.Run("right type", func(t *testing.T) {
Expand Down
9 changes: 9 additions & 0 deletions core/mapping/yamlunmarshaler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,15 @@ func TestUnmarshalYamlMapRune(t *testing.T) {
assert.Equal(t, rune(3), v.Machine["node3"])
}

func TestUnmarshalYamlStringOfInt(t *testing.T) {
text := `password: 123456`
var v struct {
Password string `json:"password"`
}
reader := strings.NewReader(text)
assert.Error(t, UnmarshalYamlReader(reader, &v))
}

func TestUnmarshalYamlBadInput(t *testing.T) {
var v struct {
Any string
Expand Down

0 comments on commit 4f22034

Please sign in to comment.