diff --git a/pkg/schema/field/number.go b/pkg/schema/field/number.go index d8dc218f8551c0ad589532f972113a8fb88e9674..40d9c8167f54d23faaa40666ec1934b451d7a516 100644 --- a/pkg/schema/field/number.go +++ b/pkg/schema/field/number.go @@ -88,6 +88,9 @@ func (NumberType) decode(_ context.Context, field *Field, v interface{}) (interf case NumberFormatInt: switch i := n.(type) { case int64: + if i > maxInt || i < minInt { + return nil, errors.New("integer out of range") + } return i, nil case uint64: if i > maxInt { diff --git a/pkg/schema/field/number_test.go b/pkg/schema/field/number_test.go index da154cd09fa7dcd80b53108a6f80c2b0fcca1f5f..367ffe4249f36f2dff17aa1e61ef6a753ccabee8 100644 --- a/pkg/schema/field/number_test.go +++ b/pkg/schema/field/number_test.go @@ -15,20 +15,20 @@ func TestNumberField_Decode(t *testing.T) { want interface{} wantErr bool }{ - {"Correct", Number("int"), int64(2), int64(2), false}, // #0 - {"Correct", Number("int"), 2.2, int64(2), false}, // #1 - {"Correct", Number("int"), 2, int64(2), false}, // #2 - {"Correct", Number("int"), float32(2.2), int64(2), false}, // #3 - {"Correct", Number("int"), float64(2.6), int64(3), false}, // #4 - {"Correct", Number("int"), 2.6, int64(3), false}, // #5 - {"MaxInt64", Number(NumberFormatInt), int64(math.MaxInt64), int64(math.MaxInt64), false}, // #6 - {"MinInt64", Number(NumberFormatInt), int64(math.MinInt64), int64(math.MinInt64), false}, // #7 - {"maxInt in float", Number(NumberFormatInt), float64(maxInt), int64(maxInt), false}, // #8 - {"minInt in float", Number(NumberFormatInt), float64(minInt), int64(minInt), false}, // #9 - {"Convert error", Number(NumberFormatInt), math.MaxFloat64, nil, true}, // #10 - {"Convert error", Number(NumberFormatInt), -math.MaxFloat64, nil, true}, // #11 - {"Convert error", Number(NumberFormatInt), float64(math.MaxInt64), nil, true}, // #13 - {"Convert error", Number(NumberFormatInt), float64(math.MinInt64), nil, true}, // #14 + {"Correct", Number("int"), int64(2), int64(2), false}, // #0 + {"Correct", Number("int"), 2.2, int64(2), false}, // #1 + {"Correct", Number("int"), 2, int64(2), false}, // #2 + {"Correct", Number("int"), float32(2.2), int64(2), false}, // #3 + {"Correct", Number("int"), float64(2.6), int64(3), false}, // #4 + {"Correct", Number("int"), 2.6, int64(3), false}, // #5 + {"MaxInt64", Number(NumberFormatInt), int64(math.MaxInt64), nil, true}, // #6 + {"MinInt64", Number(NumberFormatInt), int64(math.MinInt64), nil, true}, // #7 + {"maxInt in float", Number(NumberFormatInt), float64(maxInt), int64(maxInt), false}, // #8 + {"minInt in float", Number(NumberFormatInt), float64(minInt), int64(minInt), false}, // #9 + {"Convert error", Number(NumberFormatInt), math.MaxFloat64, nil, true}, // #10 + {"Convert error", Number(NumberFormatInt), -math.MaxFloat64, nil, true}, // #11 + {"Convert error", Number(NumberFormatInt), float64(math.MaxInt64), nil, true}, // #13 + {"Convert error", Number(NumberFormatInt), float64(math.MinInt64), nil, true}, // #14 {"Correct", Number("float"), int8(2), 2.0, false}, // #15 {"Correct", Number("float"), 2.2, 2.2, false}, // #16