Skip to content

方法清单

SDK 最常用方法的速查表。全部已对照源码核实。

方法一览

按接收者类型分组——这就是你日常会用到的全部表面。

Aliases

方法签名说明
GetCVE() string第一个匹配 CVE- 的别名(大小写不敏感——匹配前先转大写,故 cve-2024-1 能被找到并返回为 CVE-2024-1
Filter(func(string) bool) Aliases按谓词过滤别名

AffectedSlice

方法签名说明
HasEcosystem(Ecosystem) bool是否有受影响条目匹配该生态
FilterByEcosystem(Ecosystem) AffectedSlice收窄到一个生态
Filter(func(*Affected) bool) AffectedSlice自定义谓词过滤

Package

方法签名说明
IsMaven() boolEcosystem == Maven
GetGroupID() stringMaven groupId: 左侧)
GetArtifactID() stringMaven artifactId: 右侧)

SeveritySlice

方法签名说明
GetCVSS3() *Severity第一个 Type == "CVSS_V3" 的条目,或 nil
GetCVSS2() *Severity第一个 Type == "CVSS_V2" 的条目,或 nil

注意 Severity 上两个不同的字符串字段:Type(取值 "CVSS_V2" / "CVSS_V3" 之一,即 OSV severity[].type 判别字段)和 Score内容——CVSS 向量字符串如 CVSS:3.1/AV:N/…,或裸数字如 7.5)。GetCVSS3Type 匹配,绝不按向量前缀匹配。

Severity

方法签名说明
GetScore() float64把 CVSS 分数解析为 float64
GetScoreAsFloat() (float64, error)解析分数,向量字符串畸形时返回 error
GetScoreAsPointer() *float64分数指针(用于可空字段)

三者共用同一个解析器(GetScoreAsFloat),另外两个的差别只在如何报告解析失败——而 score 字段里若是 CVSS 向量字符串(如 CVSS:3.1/AV:N/…)而非数字,那就是一次解析失败。按你能处理的失败形态来选变体:

GetScore() 会掩盖向量字符串情形

因为 GetScore() 丢弃了 error,向量字符串分数与真实的 0.0 无法区分。当这个区分重要时,改用 GetScoreAsFloat()(检查 err)或 GetScoreAsPointer()(检查 nil)——并直接从 Severity.Score 读取 CVSS 向量。

References

方法签名说明
FilterByType(...ReferenceType) References保留 Type 匹配给定类型任一的引用(OR 语义);不传类型时返回 nil

Event

方法签名说明
IsIntroduced() bool事件标记 introduced 版本
IsFixed() bool事件标记 fixed 版本
IsLastAffected() bool事件标记 last_affected 版本
IsLimit() bool事件标记 range limit

Event 结构体带四个可选字符串字段(IntroducedFixedLastAffectedLimit);每个事件里只有一个被填充。每个 Is* 谓词只检查自己的字段是否非空——所以四者互斥,且恰好有一个返回 true

按顺序遍历事件,而非孤立看单个

单个事件只告诉你它是哪种边界;受影响/不受影响的答案来自按顺序走时间线、在每对 introduced/fixed 处翻转标记。见 OSV Schema → 事件时间线判定

Parsing

函数签名说明
UnmarshalFromJson([]byte) (*OsvSchema[Eco,DB], error)从字节解析
UnmarshalFromJsonFile(string) (*OsvSchema[Eco,DB], error)从文件路径解析
go
// 通用解析——两个泛型都用 any
v, err := osv.UnmarshalFromJsonFile[any, any]("vuln.json")

// 或附加生态/库专属数据
v, err := osv.UnmarshalFromJsonFile[MyEco, MyDB]("vuln.json")

务必先检查 err——出错时指针为 nil

两者在任何失败(JSON 畸形、文件缺失、解码错误)时都返回 (nil, err)。成功时指针绝不为 nil。契约即:先看 err 再碰 v,你就永远不会解引用 nil 的 *OsvSchema

方法调用关系图

解析与校验的数据流

Maven 坐标拆解

GetGroupID / GetArtifactID 按第一个 : 拆分 Maven 包名。仅当 IsMaven() 为真时才有意义。

一次真实查询,逐个方法

"某条 GHSA-… 是不是一个高危的 PyPI 漏洞,有没有修复链接?"——下面就是智能体(或你的代码)会走的精确方法链。(这条样例的 references 恰好不带 FIX 条目,所以最后一步返回空切片——但方法链本身无所谓。)

哪个方法返回什么

序列化辅助

大多数类型实现了 sql.Scannerdriver.Valuer,因此在 GORM 下能干净地作为 JSON 列存储。复杂嵌套类型(AffectedSliceSeveritySlicePackageCredits)会自动 marshal/unmarshal 为 JSON。

源码:根包 *.go

Last updated:

Released under the MIT License.