跳至主要内容

SARIF 结果超过一个或多个限制

了解如何解决当 SARIF 文件由于超过一个或多个限制而被代码扫描拒绝时的问题。

关于 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 文件中的警报(s) 超过线程流位置限制”

您可以配置分析以限制结果中包含的数据流路径数量。默认情况下,每个结果包含 4 个数据流路径。

  • 代码扫描的 CodeQL 高级设置:更新analyze步骤以将路径数量限制为最多一个或零。

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
      env: 
        CODEQL_ACTION_EXTRA_OPTIONS: '{"database":{"interpret-results":["--max-paths", 1]}}'
    
  • CodeQL CLI database analyze:更新数据库分析命令以包含--max-paths=1标志。有关更多信息,请参阅“database analyze”。

注意

max-paths设置会影响所有数据流查询的结果。

修复“由于运行限制而拒绝分析 SARIF 文件”

最简单的方法是为每次运行生成一个新的 SARIF 文件,并分别上传每个文件。您可以为每个结果添加“类别”,这使代码扫描能够适当地存储和显示结果。有关更多信息,请参阅“代码扫描的 SARIF 支持”。

修复“由于规则限制而拒绝分析 SARIF 文件”

这里有两种可能的方法。

  1. 减少用于分析代码的规则数量。有关更多信息,请参阅“定义要运行的查询套件”和“排除查询”中的“SARIF 结果文件太大”。
  2. 运行两次分析,每次使用不同的规则集,并将两个结果文件都上传到代码扫描。有关更多信息,请参阅“代码扫描的 SARIF 支持”。

修复“由于扩展限制而拒绝分析 SARIF 文件”

最简单的方法是在每次运行工具时创建一个单独的 SARIF 文件,并分别上传每个文件。您可能还需要联系工具的维护者。有关更多信息,请参阅“代码扫描的 SARIF 支持”。

CodeQL 分析不应该生成此错误。如果您在使用 CodeQL action 或 CodeQL CLI 时遇到此错误,则应联系 GitHub 支持团队告知我们。有关更多信息,请参阅“联系 GitHub 支持”。

修复“由于位置限制而拒绝分析 SARIF 文件”

解决此问题的最佳方法通常是识别报告过多位置的查询,并将其从分析中排除。有关如何执行此操作的信息,请参阅“SARIF 结果文件过大”。

修复“由于规则标签限制而拒绝分析 SARIF 文件”

您需要更新 SARIF 文件或生成器,以便为每个reportingDescriptor对象报告的标签数组少于 10 个。有关更多信息,请参阅“代码扫描的 SARIF 支持”中的properties.tags[]

修复“存储库有超过警报限制的风险”和“由于警报限制而阻止所有分析上传”

此限制由存储库产生比在正常运行的代码扫描配置中应该存在的更多唯一警报触发。这可能是由于使用了第三方工具的输出导致的,并且可能不是用户配置错误。用户配置错误和工具供应商错误都是可能的原因。

有一些步骤可以解决此问题。

  1. 查看您正在生成的 SARIF 文件,以识别代码扫描警报在工具运行之间被归类为不同的原因。通常,这是由于以下原因之一造成的
    • 由于包含临时目录或生成的文件名,SARIF 的artifactLocation.uri属性(代码扫描警报用户界面中的文件路径)不是确定性的。
    • 使用的工具会产生不稳定的 SARIF 规则名称或artifactLocation 对象 uri 属性值,这通常是使用哈希值(例如,来自 git 提交或 docker 镜像 SHA)或其他在运行或环境之间发生变化的数据源的结果。
  2. 确定问题来源后,您应该相应地更新您的配置,如果他们的工具是不稳定 SARIF 结果的来源,则联系工具供应商。
  3. 停止上传任何产生非确定性输出的第三方工具的代码扫描结果,直到工具供应商修复它们为止。

“由于警报限制而阻止所有分析上传”的其他步骤

除了修复代码扫描配置并删除或修复第三方工具的输出外,您还需要通过GitHub 支持门户联系我们,以帮助您删除任何违规配置的警报。

目前没有删除警报的自服务方法,因此在重新启用代码扫描之前,必须联系客户支持。