fix: add panic recovery and boundary checks for Math function
This commit is contained in:
@@ -282,7 +282,14 @@ func (h *Handler) loadCharset() ([]string, error) {
|
||||
|
||||
const mathChars = "0123456789+-*/÷×=?"
|
||||
|
||||
func (h *Handler) Math(imageBase64 string) (string, error) {
|
||||
func (h *Handler) Math(imageBase64 string) (result string, err error) {
|
||||
// 捕获 panic
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
err = fmt.Errorf("Math panic: %v", r)
|
||||
}
|
||||
}()
|
||||
|
||||
sess, ok := onnx.GetSession("math")
|
||||
if !ok {
|
||||
return "", fmt.Errorf("Math 模型未加载")
|
||||
@@ -315,7 +322,7 @@ func (h *Handler) Math(imageBase64 string) (string, error) {
|
||||
return "", fmt.Errorf("无法识别表达式")
|
||||
}
|
||||
|
||||
result, err := evalMathExpression(expr)
|
||||
result, err = evalMathExpression(expr)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -330,11 +337,23 @@ func preprocessMath(img image.Image) ([]float32, error) {
|
||||
// 计算缩放比例
|
||||
bounds := img.Bounds()
|
||||
srcW, srcH := bounds.Dx(), bounds.Dy()
|
||||
if srcW <= 0 || srcH <= 0 {
|
||||
return nil, fmt.Errorf("无效的图片尺寸")
|
||||
}
|
||||
|
||||
ratio := minFloat(float64(targetW)/float64(srcW), float64(targetH)/float64(srcH))
|
||||
|
||||
newW := int(float64(srcW) * ratio)
|
||||
newH := int(float64(srcH) * ratio)
|
||||
|
||||
// 确保至少 1 像素
|
||||
if newW <= 0 {
|
||||
newW = 1
|
||||
}
|
||||
if newH <= 0 {
|
||||
newH = 1
|
||||
}
|
||||
|
||||
// 缩放图片
|
||||
resized := imaging.Resize(img, newW, newH, imaging.Lanczos)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user