From aeb3aba168acfaccbf8c79339b2b9e78b6a5f896 Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 26 Mar 2025 17:44:49 +0100 Subject: [PATCH] Plugins: filter nan values (#20137) --- plugin/getter.go | 4 +--- plugin/helper.go | 11 +++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) 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 +}