diff --git a/core/field_number.go b/core/field_number.go index 0704d40f..138c97dd 100644 --- a/core/field_number.go +++ b/core/field_number.go @@ -3,6 +3,7 @@ package core import ( "context" "fmt" + "math" validation "github.com/go-ozzo/ozzo-validation/v4" "github.com/pocketbase/pocketbase/core/validators" @@ -118,6 +119,10 @@ func (f *NumberField) ValidateValue(ctx context.Context, app App, record *Record return validators.ErrUnsupportedValueType } + if math.IsInf(val, 0) || math.IsNaN(val) { + return validation.NewError("validation_not_a_number", "The submitted number is not properly formatted") + } + if val == 0 { if f.Required { if err := validation.Required.Validate(val); err != nil { diff --git a/core/field_number_test.go b/core/field_number_test.go index d1e06567..4960f9ce 100644 --- a/core/field_number_test.go +++ b/core/field_number_test.go @@ -177,6 +177,26 @@ func TestNumberFieldValidateValue(t *testing.T) { }, false, }, + { + "infinitiy", + &core.NumberField{Name: "test"}, + func() *core.Record { + record := core.NewRecord(collection) + record.Set("test", "Inf") + return record + }, + true, + }, + { + "NaN", + &core.NumberField{Name: "test"}, + func() *core.Record { + record := core.NewRecord(collection) + record.Set("test", "NaN") + return record + }, + true, + }, } for _, s := range scenarios {