+3
-3
@@ -978,7 +978,7 @@ func (d *Decoder) valueFromToml(mtype reflect.Type, tval interface{}, mval1 *ref
|
|||||||
if !val.Type().ConvertibleTo(mtype) {
|
if !val.Type().ConvertibleTo(mtype) {
|
||||||
return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to %v", tval, tval, mtype.String())
|
return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to %v", tval, tval, mtype.String())
|
||||||
}
|
}
|
||||||
if reflect.Indirect(reflect.New(mtype)).OverflowInt(val.Convert(mtype).Int()) {
|
if reflect.Indirect(reflect.New(mtype)).OverflowInt(val.Convert(reflect.TypeOf(int64(0))).Int()) {
|
||||||
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) would overflow %v", tval, tval, mtype.String())
|
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) would overflow %v", tval, tval, mtype.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -992,7 +992,7 @@ func (d *Decoder) valueFromToml(mtype reflect.Type, tval interface{}, mval1 *ref
|
|||||||
if val.Convert(reflect.TypeOf(int(1))).Int() < 0 {
|
if val.Convert(reflect.TypeOf(int(1))).Int() < 0 {
|
||||||
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) is negative so does not fit in %v", tval, tval, mtype.String())
|
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) is negative so does not fit in %v", tval, tval, mtype.String())
|
||||||
}
|
}
|
||||||
if reflect.Indirect(reflect.New(mtype)).OverflowUint(uint64(val.Convert(mtype).Uint())) {
|
if reflect.Indirect(reflect.New(mtype)).OverflowUint(val.Convert(reflect.TypeOf(uint64(0))).Uint()) {
|
||||||
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) would overflow %v", tval, tval, mtype.String())
|
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) would overflow %v", tval, tval, mtype.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1002,7 +1002,7 @@ func (d *Decoder) valueFromToml(mtype reflect.Type, tval interface{}, mval1 *ref
|
|||||||
if !val.Type().ConvertibleTo(mtype) {
|
if !val.Type().ConvertibleTo(mtype) {
|
||||||
return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to %v", tval, tval, mtype.String())
|
return reflect.ValueOf(nil), fmt.Errorf("Can't convert %v(%T) to %v", tval, tval, mtype.String())
|
||||||
}
|
}
|
||||||
if reflect.Indirect(reflect.New(mtype)).OverflowFloat(val.Convert(mtype).Float()) {
|
if reflect.Indirect(reflect.New(mtype)).OverflowFloat(val.Convert(reflect.TypeOf(float64(0))).Float()) {
|
||||||
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) would overflow %v", tval, tval, mtype.String())
|
return reflect.ValueOf(nil), fmt.Errorf("%v(%T) would overflow %v", tval, tval, mtype.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2023,6 +2023,32 @@ func TestUnmarshalCamelCaseKey(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalOverflow(t *testing.T) {
|
||||||
|
type overflow struct {
|
||||||
|
U8 uint8
|
||||||
|
I8 int8
|
||||||
|
F32 float32
|
||||||
|
}
|
||||||
|
|
||||||
|
treeU8, _ := Load("u8 = 300")
|
||||||
|
treeI8, _ := Load("i8 = 300")
|
||||||
|
treeF32, _ := Load("f32 = 1e300")
|
||||||
|
|
||||||
|
errU8 := treeU8.Unmarshal(&overflow{})
|
||||||
|
errI8 := treeI8.Unmarshal(&overflow{})
|
||||||
|
errF32 := treeF32.Unmarshal(&overflow{})
|
||||||
|
|
||||||
|
if errU8.Error() != "(1, 1): 300(int64) would overflow uint8" {
|
||||||
|
t.Error("expect err:(1, 1): 300(int64) would overflow uint8 but got:", errU8)
|
||||||
|
}
|
||||||
|
if errI8.Error() != "(1, 1): 300(int64) would overflow int8" {
|
||||||
|
t.Error("expect err:(1, 1): 300(int64) would overflow int8 but got:", errI8)
|
||||||
|
}
|
||||||
|
if errF32.Error() != "(1, 1): 1e+300(float64) would overflow float32" {
|
||||||
|
t.Error("expect err:(1, 1): 1e+300(float64) would overflow float32 but got:", errF32)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshalDefault(t *testing.T) {
|
func TestUnmarshalDefault(t *testing.T) {
|
||||||
type EmbeddedStruct struct {
|
type EmbeddedStruct struct {
|
||||||
StringField string `default:"c"`
|
StringField string `default:"c"`
|
||||||
|
|||||||
Reference in New Issue
Block a user