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+-*/÷×=?"
|
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")
|
sess, ok := onnx.GetSession("math")
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", fmt.Errorf("Math 模型未加载")
|
return "", fmt.Errorf("Math 模型未加载")
|
||||||
@@ -315,7 +322,7 @@ func (h *Handler) Math(imageBase64 string) (string, error) {
|
|||||||
return "", fmt.Errorf("无法识别表达式")
|
return "", fmt.Errorf("无法识别表达式")
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := evalMathExpression(expr)
|
result, err = evalMathExpression(expr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -330,11 +337,23 @@ func preprocessMath(img image.Image) ([]float32, error) {
|
|||||||
// 计算缩放比例
|
// 计算缩放比例
|
||||||
bounds := img.Bounds()
|
bounds := img.Bounds()
|
||||||
srcW, srcH := bounds.Dx(), bounds.Dy()
|
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))
|
ratio := minFloat(float64(targetW)/float64(srcW), float64(targetH)/float64(srcH))
|
||||||
|
|
||||||
newW := int(float64(srcW) * ratio)
|
newW := int(float64(srcW) * ratio)
|
||||||
newH := int(float64(srcH) * 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)
|
resized := imaging.Resize(img, newW, newH, imaging.Lanczos)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user