diff --git a/plugin/getter.go b/plugin/getter.go index b693608f3..f9bb73f14 100644 --- a/plugin/getter.go +++ b/plugin/getter.go @@ -1,8 +1,6 @@ package plugin import ( - "strconv" - "github.com/spf13/cast" ) @@ -30,7 +28,7 @@ func (p *getter) FloatGetter() (func() (float64, error), error) { return 0, err } - f, err := strconv.ParseFloat(s, 64) + f, err := parseFloat(s) if err != nil { return 0, err } diff --git a/plugin/helper.go b/plugin/helper.go index 7f7520258..b1048d980 100644 --- a/plugin/helper.go +++ b/plugin/helper.go @@ -3,6 +3,8 @@ package plugin import ( "context" "fmt" + "math" + "strconv" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" @@ -42,3 +44,12 @@ func contextLogger(ctx context.Context, log *util.Logger) *util.Logger { return log } + +// parseFloat rejects NaN and Inf values +func parseFloat(payload string) (float64, error) { + f, err := strconv.ParseFloat(payload, 64) + if err == nil && (math.IsNaN(f) || math.IsInf(f, 0)) { + return 0, fmt.Errorf("invalid float value: %s", payload) + } + return f, err +}