From 35218609d9c9d0d9ebdad118980cb1200845ef5f Mon Sep 17 00:00:00 2001 From: CaIon Date: Wed, 27 Aug 2025 16:38:32 +0800 Subject: [PATCH] fix(image): add error handling for empty base64 string in image decoding --- service/image.go | 4 ++++ service/token_counter.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/service/image.go b/service/image.go index 252093f1..453d8dd1 100644 --- a/service/image.go +++ b/service/image.go @@ -21,6 +21,10 @@ func DecodeBase64ImageData(base64String string) (image.Config, string, string, e base64String = base64String[idx+1:] } + if len(base64String) == 0 { + return image.Config{}, "", "", errors.New("base64 string is empty") + } + // 将base64字符串解码为字节切片 decodedData, err := base64.StdEncoding.DecodeString(base64String) if err != nil { diff --git a/service/token_counter.go b/service/token_counter.go index bac6c067..84b41328 100644 --- a/service/token_counter.go +++ b/service/token_counter.go @@ -301,7 +301,7 @@ func CountRequestToken(c *gin.Context, meta *types.TokenCountMeta, info *relayco } } - for _, file := range meta.Files { + for i, file := range meta.Files { switch file.FileType { case types.FileTypeImage: if info.RelayFormat == types.RelayFormatGemini { @@ -309,7 +309,7 @@ func CountRequestToken(c *gin.Context, meta *types.TokenCountMeta, info *relayco } else { token, err := getImageToken(file, model, info.IsStream) if err != nil { - return 0, fmt.Errorf("error counting image token: %v", err) + return 0, fmt.Errorf("error counting image token, media index[%d], original data[%s], err: %v", i, file.OriginData, err) } tkm += token }