关于 SARIF 结果的代码扫描限制
# SARIF results exceed soft limits
Locations for an alert exceeded limits
Analysis SARIF file exceeded alert limits
Rule tags in SARIF file exceed limits
Alert in SARIF upload exceeded thread flow location limits
Repository is at risk of exceeding the alert limit.
# SARIF results exceed hard limit
Alert(s) in SARIF file exceeded thread flow location limits
Analysis SARIF file rejected due to extension limits
Analysis SARIF file rejected due to location limit
Analysis SARIF file rejected due to rule tag limits
Analysis SARIF file rejected due to result limits
Analysis SARIF file rejected due to rule limits
Analysis SARIF file rejected due to run limits
All analysis uploads blocked due to alert limit
代码扫描对 SARIF 结果文件中的字段设置了两种类型的限制。
- 软限制决定存储和向用户显示的数据量。
- 硬限制决定可接受的最大处理数据量。
您可能会在 CodeQL 或第三方分析工具生成的 SARIF 文件中看到这些错误。
| SARIF 数据 | 最大值 | 数据截断限制 |
|---|---|---|
| 每个文件的运行次数 | 20 | 无 |
| 每次运行的结果数 | 25,000 | 仅包含前 5,000 条结果,按严重性优先级排序。 |
| 每次运行的规则数 | 25,000 | 无 |
| 每次运行的工具扩展数 | 100 | 无 |
| 每个结果的线程流位置数 | 10,000 | 仅包含前 1,000 个线程流位置,并使用优先级排序。 |
| 每个结果的位置数 | 1,000 | 仅包含 100 个位置。 |
| 每条规则的标签数 | 20 | 仅包含 10 个标签。 |
| 警报限制 | 1,000,000 | 无 |
有关验证 SARIF 文件的信息,请参阅代码扫描的 SARIF 支持。
修复软限制错误
当软限制被超出时,代码扫描会显示最高优先级的信息。通常您无需更改代码扫描配置。随着团队修复警报,每次运行报告的结果数量会减少,直至符合软限制并显示所有结果。或者,您可以使用针对硬限制错误描述的方法。
修复“分析 SARIF 文件因结果限制被拒绝”
有许多考虑因素和潜在解决方案可用于减少 SARIF 结果文件中包含的结果数量。有关指导,请参阅SARIF 结果文件过大。
修复“SARIF 文件中的警报超过线程流位置限制”
您可以配置分析,以限制结果中包含的数据流路径数量。默认情况下,每个结果会包含 4 条数据流路径。
-
CodeQL 高级代码扫描设置:更新
analyze步骤,将路径数量限制为最多一个或零。- name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 env: CODEQL_ACTION_EXTRA_OPTIONS: '{"database":{"interpret-results":["--max-paths", 1]}}' -
CodeQL CLI
database analyze:更新数据库分析命令,加入--max-paths=1标志。更多信息请参阅database analyze。
注意
max-paths 设置会影响所有数据流查询的结果。
修复“分析 SARIF 文件因运行限制被拒绝”
最简单的方法是为每一次运行生成一个新的 SARIF 文件并分别上传。您可以为每个结果添加“category”,从而使代码扫描能够正确存储和显示这些结果。更多信息请参阅将 SARIF 文件上传到 GitHub。
修复“分析 SARIF 文件因规则限制被拒绝”
这里有两种可能的做法。
- 减少用于分析代码的规则数量。更多信息,请参阅定义要运行的查询套件以及从分析中排除查询(位于“SARIF 结果文件过大”章节)。
- 将分析运行两次,每次使用不同的规则集合,然后将两个结果文件都上传到代码扫描。更多信息请参阅将 SARIF 文件上传到 GitHub。
修复“分析 SARIF 文件因扩展限制被拒绝”
最简单的做法是每次运行工具时创建一个独立的 SARIF 文件并分别上传。您可能还需要联系该工具的维护者。更多信息请参阅将 SARIF 文件上传到 GitHub。
CodeQL 分析不应出现此错误。如果在使用 CodeQL action 或 CodeQL CLI 时看到此错误,请联系 GitHub 支持并告知我们。更多信息请参阅联系 GitHub 支持。
修复“分析 SARIF 文件因位置限制被拒绝”
解决此问题的最佳方式通常是找出报告位置过多的查询并将其从分析中排除。有关操作方法,请参阅SARIF 结果文件过大。
修复“分析 SARIF 文件因规则标签限制被拒绝”
您需要更新 SARIF 文件或生成器,使每个 reportingDescriptor 对象报告的标签数组少于 10 个。更多信息请参阅 properties.tags[] 在代码扫描的 SARIF 支持 中的说明。
修复“仓库有超过警报限制的风险” & “所有分析上传因警报限制被阻止”
此限制由仓库产生的唯一警报数超过在正常运行的代码扫描配置中应有的数量而触发。这可能是由于使用的第三方工具输出所致,并不一定是用户配置错误。用户配置错误和工具供应商错误均可能是原因。
有几个步骤可以解决此问题。
- 查看您生成的 SARIF 文件,以找出导致代码扫描警报在工具的不同运行中被视为不同的原因。通常是以下原因之一:
- SARIF 的
artifactLocation.uri属性(代码扫描警报用户界面中的文件路径)因包含临时目录或生成的文件名而不是确定性的。 - 所使用的工具生成不稳定的 SARIF 规则名称或
artifactLocation 对象的 uri 属性值,这通常是由于使用哈希(如 Git 提交哈希或 Docker 镜像 SHA)或其他在不同运行或环境中会变化的数据来源导致的。
- SARIF 的
- 确定问题来源后,您应相应地更新配置;如果不稳定的 SARIF 结果来源于该工具,请联系工具供应商。
- 停止上传任何产生非确定性输出的第三方工具的代码扫描结果,直至该工具供应商修复问题。
针对“所有分析上传因警报限制被阻止”的额外步骤
在修复代码扫描配置并移除或修复第三方工具的输出之外,您还需要通过GitHub 支持门户 与我们联系,以帮助删除任何有问题的配置产生的警报。
目前没有自行删除警报的方法,因此在重新启用代码扫描之前,需要联系客户支持。