[LOW] fmt.Sscanf 返回值未检查:可能导致逻辑错误 #12

Open
opened 2026-04-30 03:56:18 +08:00 by lan · 0 comments
Owner

问题描述

多处代码调用 fmt.Sscanf 但未检查返回值,导致解析失败时变量保持零值,可能引发逻辑错误。

影响位置

1. internal/service/vote_service.go:131

fmt.Sscanf(userID, "%d", &authorID)
// 若 userID 不是有效数字,authorID 保持 0,可能导致匹配到错误用户

2. internal/service/schedule_sync_service.go:118

fmt.Sscanf(st.Day, "%d", &dayOfWeek)
// 若 Day 字段格式异常,dayOfWeek 为 0,可能写入错误的星期数据

3. internal/service/user_service.go:598-626
多处分页参数解析(page, pageSize)的 Sscanf 返回值被赋值给 err 但在某些分支中未做错误处理。

风险

  • 投票权限判断错误
  • 日程同步数据错乱
  • 分页参数解析异常导致返回全量数据

修复建议

if _, err := fmt.Sscanf(userID, "%d", &authorID); err != nil {
    return fmt.Errorf("invalid user ID format: %w", err)
}

严重程度

LOW — 不会直接导致安全漏洞,但可能引发业务逻辑异常。

## 问题描述 多处代码调用 `fmt.Sscanf` 但未检查返回值,导致解析失败时变量保持零值,可能引发逻辑错误。 ### 影响位置 **1. `internal/service/vote_service.go:131`** ```go fmt.Sscanf(userID, "%d", &authorID) // 若 userID 不是有效数字,authorID 保持 0,可能导致匹配到错误用户 ``` **2. `internal/service/schedule_sync_service.go:118`** ```go fmt.Sscanf(st.Day, "%d", &dayOfWeek) // 若 Day 字段格式异常,dayOfWeek 为 0,可能写入错误的星期数据 ``` **3. `internal/service/user_service.go:598-626`** 多处分页参数解析(`page`, `pageSize`)的 Sscanf 返回值被赋值给 `err` 但在某些分支中未做错误处理。 ## 风险 - 投票权限判断错误 - 日程同步数据错乱 - 分页参数解析异常导致返回全量数据 ## 修复建议 ```go if _, err := fmt.Sscanf(userID, "%d", &authorID); err != nil { return fmt.Errorf("invalid user ID format: %w", err) } ``` ## 严重程度 **LOW** — 不会直接导致安全漏洞,但可能引发业务逻辑异常。
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: carrot_bbs/backend#12