diff --git a/pkg/schema/field/number.go b/pkg/schema/field/number.go
index 1075ef2bc075ef07aa403ee3ad1dd51903f32345..d8dc218f8551c0ad589532f972113a8fb88e9674 100644
--- a/pkg/schema/field/number.go
+++ b/pkg/schema/field/number.go
@@ -90,6 +90,9 @@ func (NumberType) decode(_ context.Context, field *Field, v interface{}) (interf
 		case int64:
 			return i, nil
 		case uint64:
+			if i > maxInt {
+				return nil, errors.New("integer out of range")
+			}
 			return i, nil
 		case float64:
 			if i > maxInt || i < minInt {
diff --git a/pkg/schema/field/number_test.go b/pkg/schema/field/number_test.go
index 797091669c780b422238866453d30d592de34a24..da154cd09fa7dcd80b53108a6f80c2b0fcca1f5f 100644
--- a/pkg/schema/field/number_test.go
+++ b/pkg/schema/field/number_test.go
@@ -1,6 +1,7 @@
 package field
 
 import (
+	"context"
 	"math"
 	"reflect"
 	"testing"
@@ -42,7 +43,7 @@ func TestNumberField_Decode(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			got, err := Decode(nil, tt.field, tt.data)
+			got, err := Decode(context.Background(), tt.field, tt.data)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("Decode() error = %v, wantErr %v", err, tt.wantErr)
 				return
@@ -82,7 +83,7 @@ func TestNumberField_Encode(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			got, err := Encode(nil, tt.field, tt.data)
+			got, err := Encode(context.Background(), tt.field, tt.data)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("Decode() error = %v, wantErr %v", err, tt.wantErr)
 				return
diff --git a/pkg/schema/test/object_test.go b/pkg/schema/test/object_test.go
index e5af975cdb9ed8e86044e5d357530dd2420afee9..4d9d13a521b6c4f9de48e507759e425afbb2b88b 100644
--- a/pkg/schema/test/object_test.go
+++ b/pkg/schema/test/object_test.go
@@ -74,6 +74,66 @@ func TestNumberField_JSON(t *testing.T) {
 	assert.Equal(t, fld, res)
 }
 
+func TestNumberField_JSON_With_MaxInt(t *testing.T) {
+	t.Run("Without overflow from int64", func(t *testing.T) {
+		fld := field.Object("num", field.Number(field.NumberFormatInt))
+
+		itemData := map[string]interface{}{"num": 1<<53 - 1}
+
+		b, err := json.Marshal(itemData)
+		require.NoError(t, err)
+
+		itemDataToDecode := make(map[string]interface{})
+		require.NoError(t, json.Unmarshal(b, &itemDataToDecode))
+
+		_, err = field.Decode(context.Background(), fld, itemDataToDecode)
+		require.NoError(t, err)
+	})
+	t.Run("With overflow from int64", func(t *testing.T) {
+		fld := field.Object("num", field.Number(field.NumberFormatInt))
+
+		itemData := map[string]interface{}{"num": 1 << 53}
+
+		b, err := json.Marshal(itemData)
+		require.NoError(t, err)
+
+		itemDataToDecode := make(map[string]interface{})
+		require.NoError(t, json.Unmarshal(b, &itemDataToDecode))
+
+		_, err = field.Decode(context.Background(), fld, itemDataToDecode)
+		require.Error(t, err, "integer out of range")
+	})
+	t.Run("With overflow from uint64", func(t *testing.T) {
+		fld := field.Object("num", field.Number(field.NumberFormatInt))
+
+		itemData := map[string]interface{}{"num": uint64(1 << 53)}
+
+		b, err := json.Marshal(itemData)
+		require.NoError(t, err)
+
+		itemDataToDecode := make(map[string]interface{})
+		require.NoError(t, json.Unmarshal(b, &itemDataToDecode))
+
+		_, err = field.Decode(context.Background(), fld, itemDataToDecode)
+		require.Error(t, err, "integer out of range")
+	})
+	t.Run("With overflow from float64", func(t *testing.T) {
+		fld := field.Object("num", field.Number(field.NumberFormatInt))
+
+		itemData := map[string]interface{}{"num": float64(1 << 53)}
+
+		b, err := json.Marshal(itemData)
+		require.NoError(t, err)
+
+		itemDataToDecode := make(map[string]interface{})
+		require.NoError(t, json.Unmarshal(b, &itemDataToDecode))
+
+		_, err = field.Decode(context.Background(), fld, itemDataToDecode)
+		require.Error(t, err, "integer out of range")
+	})
+
+}
+
 func TestSchema_JSON(t *testing.T) {
 	enumStr := field.String().AddOptions(
 		validate.Enum(