fix: negative float32 overflow when unmarshalling (#3811)

Co-authored-by: kim1.jin <kim1.jin@bkyo.io>
master
Kimjin-gd 11 months ago committed by GitHub
parent 28c742a1e1
commit 6ec38ec056
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,7 +5,6 @@ import (
"encoding/json"
"errors"
"fmt"
"math"
"reflect"
"strconv"
"strings"
@ -622,7 +621,7 @@ func (u *Unmarshaler) processFieldPrimitiveWithJSONNumber(fieldType reflect.Type
return err
}
if fValue > math.MaxFloat32 {
if value.OverflowFloat(fValue) {
return fmt.Errorf("parsing %q as float32: value out of range", v.String())
}

@ -976,6 +976,19 @@ func TestUnmarshalFloat32WithOverflow(t *testing.T) {
assert.Error(t, UnmarshalKey(m, &in))
})
t.Run("float32 from string less than float32", func(t *testing.T) {
type inner struct {
Value float32 `key:"float, string"`
}
m := map[string]any{
"float": "-1.79769313486231570814527423731704356798070e+300", // overflow
}
var in inner
assert.Error(t, UnmarshalKey(m, &in))
})
t.Run("float32 from json.Number greater than float64", func(t *testing.T) {
type inner struct {
Value float32 `key:"float"`
@ -1001,6 +1014,19 @@ func TestUnmarshalFloat32WithOverflow(t *testing.T) {
var in inner
assert.Error(t, UnmarshalKey(m, &in))
})
t.Run("float32 from json number less than float32", func(t *testing.T) {
type inner struct {
Value float32 `key:"float"`
}
m := map[string]any{
"float": json.Number("-1.79769313486231570814527423731704356798070e+300"), // overflow
}
var in inner
assert.Error(t, UnmarshalKey(m, &in))
})
}
func TestUnmarshalFloat64WithOverflow(t *testing.T) {

Loading…
Cancel
Save