THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

fix: trunc/pow/exp 非法入参与越界返回错误,不再静默返回 NaN/0

This commit is contained in:
rulego-team
2026-07-07 14:44:18 +08:00
parent b00a782fdd
commit cae738223e
4 changed files with 62 additions and 6 deletions
+13 -4
View File
@@ -448,19 +448,28 @@ func (f *TruncFunction) Execute(ctx *FunctionContext, args []interface{}) (inter
return nil, err
}
// 转换第一个参数为浮点数
num := cast.ToFloat64(args[0])
// 转换第一个参数为浮点数(NULL/非数值返回错误,不再静默当 0)
num, err := cast.ToFloat64E(args[0])
if err != nil {
return nil, err
}
// 转换第二个参数为整数(精度)
precision := cast.ToInt(args[1])
precision, err := cast.ToIntE(args[1])
if err != nil {
return nil, err
}
// 精度不能为负数
if precision < 0 {
return nil, fmt.Errorf("trunc precision cannot be negative")
}
// 计算截断
// 计算截断。precision 过大时 multiplier 溢出为 +Inf,截断无意义,报错。
multiplier := math.Pow(10, float64(precision))
if math.IsInf(multiplier, 0) {
return nil, fmt.Errorf("trunc precision %d too large", precision)
}
if num >= 0 {
return math.Floor(num*multiplier) / multiplier, nil
} else {
Internal Server Error - Gitea: Git with a cup of tea
500 Internal Server Error

Gitea Version: 1.28.0+dev-211-ga30d865b78