Skip to content

Commit 3094d59

Browse files
author
Dean Karn
authored
fix float cast precicion in a few validations (#1146)
1 parent 5bf55dc commit 3094d59

File tree

2 files changed

+57
-17
lines changed

2 files changed

+57
-17
lines changed

baked_in.go

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,8 +1295,13 @@ func isEq(fl FieldLevel) bool {
12951295

12961296
return field.Uint() == p
12971297

1298-
case reflect.Float32, reflect.Float64:
1299-
p := asFloat(param)
1298+
case reflect.Float32:
1299+
p := asFloat32(param)
1300+
1301+
return field.Float() == p
1302+
1303+
case reflect.Float64:
1304+
p := asFloat64(param)
13001305

13011306
return field.Float() == p
13021307

@@ -1760,8 +1765,11 @@ func requireCheckFieldValue(
17601765
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
17611766
return field.Uint() == asUint(value)
17621767

1763-
case reflect.Float32, reflect.Float64:
1764-
return field.Float() == asFloat(value)
1768+
case reflect.Float32:
1769+
return field.Float() == asFloat32(value)
1770+
1771+
case reflect.Float64:
1772+
return field.Float() == asFloat64(value)
17651773

17661774
case reflect.Slice, reflect.Map, reflect.Array:
17671775
return int64(field.Len()) == asInt(value)
@@ -2060,8 +2068,13 @@ func isGte(fl FieldLevel) bool {
20602068

20612069
return field.Uint() >= p
20622070

2063-
case reflect.Float32, reflect.Float64:
2064-
p := asFloat(param)
2071+
case reflect.Float32:
2072+
p := asFloat32(param)
2073+
2074+
return field.Float() >= p
2075+
2076+
case reflect.Float64:
2077+
p := asFloat64(param)
20652078

20662079
return field.Float() >= p
20672080

@@ -2106,10 +2119,16 @@ func isGt(fl FieldLevel) bool {
21062119

21072120
return field.Uint() > p
21082121

2109-
case reflect.Float32, reflect.Float64:
2110-
p := asFloat(param)
2122+
case reflect.Float32:
2123+
p := asFloat32(param)
21112124

21122125
return field.Float() > p
2126+
2127+
case reflect.Float64:
2128+
p := asFloat64(param)
2129+
2130+
return field.Float() > p
2131+
21132132
case reflect.Struct:
21142133

21152134
if field.Type().ConvertibleTo(timeType) {
@@ -2148,8 +2167,13 @@ func hasLengthOf(fl FieldLevel) bool {
21482167

21492168
return field.Uint() == p
21502169

2151-
case reflect.Float32, reflect.Float64:
2152-
p := asFloat(param)
2170+
case reflect.Float32:
2171+
p := asFloat32(param)
2172+
2173+
return field.Float() == p
2174+
2175+
case reflect.Float64:
2176+
p := asFloat64(param)
21532177

21542178
return field.Float() == p
21552179
}
@@ -2281,8 +2305,13 @@ func isLte(fl FieldLevel) bool {
22812305

22822306
return field.Uint() <= p
22832307

2284-
case reflect.Float32, reflect.Float64:
2285-
p := asFloat(param)
2308+
case reflect.Float32:
2309+
p := asFloat32(param)
2310+
2311+
return field.Float() <= p
2312+
2313+
case reflect.Float64:
2314+
p := asFloat64(param)
22862315

22872316
return field.Float() <= p
22882317

@@ -2327,8 +2356,13 @@ func isLt(fl FieldLevel) bool {
23272356

23282357
return field.Uint() < p
23292358

2330-
case reflect.Float32, reflect.Float64:
2331-
p := asFloat(param)
2359+
case reflect.Float32:
2360+
p := asFloat32(param)
2361+
2362+
return field.Float() < p
2363+
2364+
case reflect.Float64:
2365+
p := asFloat64(param)
23322366

23332367
return field.Float() < p
23342368

util.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,19 @@ func asUint(param string) uint64 {
261261
return i
262262
}
263263

264-
// asFloat returns the parameter as a float64
264+
// asFloat64 returns the parameter as a float64
265265
// or panics if it can't convert
266-
func asFloat(param string) float64 {
267-
266+
func asFloat64(param string) float64 {
268267
i, err := strconv.ParseFloat(param, 64)
269268
panicIf(err)
269+
return i
270+
}
270271

272+
// asFloat64 returns the parameter as a float64
273+
// or panics if it can't convert
274+
func asFloat32(param string) float64 {
275+
i, err := strconv.ParseFloat(param, 32)
276+
panicIf(err)
271277
return i
272278
}
273279

0 commit comments

Comments
 (0)