From 7ed399c1e3ea2d944bcb558dcd252b8bfccef606 Mon Sep 17 00:00:00 2001 From: Sven Rebhan Date: Fri, 24 Sep 2021 00:00:01 +0200 Subject: [PATCH 1/2] Make all floating-point functions return NaN if arguments could not be converted to a number. --- func.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/func.go b/func.go index fd4187b..afe5988 100644 --- a/func.go +++ b/func.go @@ -122,17 +122,19 @@ func asNumber(t iterator, o interface{}) float64 { return typ case string: v, err := strconv.ParseFloat(typ, 64) - if err != nil { - panic(errors.New("ceiling() function argument type must be a node-set or number")) + if err == nil { + return v } - return v } - return 0 + return math.NaN() } // ceilingFunc is a XPath Node Set functions ceiling(node-set). func ceilingFunc(q query, t iterator) interface{} { val := asNumber(t, functionArgs(q).Evaluate(t)) + // if math.IsNaN(val) { + // panic(errors.New("ceiling() function argument type must be a valid number")) + // } return math.Ceil(val) } From d9cc617a6088a9b091b58f37aaefabddc266fbf5 Mon Sep 17 00:00:00 2001 From: Sven Rebhan Date: Fri, 24 Sep 2021 00:00:09 +0200 Subject: [PATCH 2/2] Formatting. --- func_go110.go | 3 ++- func_pre_go110.go | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/func_go110.go b/func_go110.go index 6df30d3..a515ac1 100644 --- a/func_go110.go +++ b/func_go110.go @@ -1,3 +1,4 @@ +//go:build go1.10 // +build go1.10 package xpath @@ -11,6 +12,6 @@ func round(f float64) int { return int(math.Round(f)) } -func newStringBuilder() stringBuilder{ +func newStringBuilder() stringBuilder { return &strings.Builder{} } diff --git a/func_pre_go110.go b/func_pre_go110.go index 335141f..a1497f2 100644 --- a/func_pre_go110.go +++ b/func_pre_go110.go @@ -1,3 +1,4 @@ +//go:build !go1.10 // +build !go1.10 package xpath