fix: resolve CVE logs only showing entries up to 2021#425
Conversation
Add parseBinaryPackages function to handle three binary field formats:
- JSON object array: [{"name":"pkg", ...}]
- String-encoded JSON: "[{\"name\":\"pkg\", ...}]"
- Legacy Python-style list: ['pkg1', 'pkg2']
Refactor updateCVEMetaDataSync to use parseBinaryPackages.
PMS: TASK-387925
deepin pr auto review你好!我是CodeGeeX。我已经仔细审查了你提供的Git Diff代码。这次修改的主要目的是重构CVE二进制包的解析逻辑,将其从原有的仅支持Python风格列表( 整体来看,代码结构清晰,测试覆盖也很全面。不过,在语法逻辑、代码质量、性能和安全性方面,我仍有以下几点改进建议: 1. 语法与逻辑
2. 代码质量
3. 代码性能
4. 代码安全
综合改进后的代码示例以下是结合了上述建议改进后的 import (
"encoding/json"
"regexp"
"strings"
)
type binaryObject struct {
Name string `json:"name"`
}
// pyListRe 用于安全提取 Python 风格列表中的单引号内容
var pyListRe = regexp.MustCompile(`'([^']*)'`)
func parseBinaryPackages(raw string) []string {
raw = strings.TrimSpace(raw)
if raw == "None" || len(raw) == 0 {
return nil
}
decoded := raw
// 处理被二次 JSON 编码的字符串 (如 "[{\"name\":\"pkg\"}]")
if strings.HasPrefix(decoded, "\"") {
var s string
if err := json.Unmarshal([]byte(decoded), &s); err == nil {
decoded = s
}
}
// 尝试解析标准 JSON 对象数组
if strings.HasPrefix(decoded, "[") {
var objs []binaryObject
if err := json.Unmarshal([]byte(decoded), &objs); err == nil {
pkgs := make([]string, 0, len(objs))
for _, o := range objs {
if o.Name != "" {
pkgs = append(pkgs, o.Name)
}
}
if len(pkgs) > 0 {
return pkgs
}
} else {
// TODO: 如果需要严格排查数据质量问题,可以在此添加日志
// log.Printf("warn: failed to parse JSON format binaries: %v, raw: %s", err, decoded)
}
}
// Fallback: 兼容旧版 Python 风格列表: ['pkg1', 'pkg2']
matches := pyListRe.FindAllStringSubmatch(raw, -1)
if len(matches) == 0 {
return nil
}
pkgs := make([]string, 0, len(matches))
for _, m := range matches {
pkg := m[1] // m[0] 是完整匹配如 'pkg1',m[1] 是捕获组内容 pkg1
if pkg != "" && pkg != "None" {
pkgs = append(pkgs, pkg)
}
}
if len(pkgs) == 0 {
return nil
}
return pkgs
}测试代码的同步修改: |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: electricface, guonafu The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Add parseBinaryPackages function to handle three binary field formats:
Refactor updateCVEMetaDataSync to use parseBinaryPackages.
PMS: TASK-387925