Skip to main content

SARIF 結果ファイルが大きすぎる

10 MB を超える SARIF 結果ファイルを code scanning にアップロードすることはできません。 影響が最も大きい結果を含むより小さなファイルを生成する方法を確認します。

このエラーについて

SARIF file is too large
SARIF results file is too large
SARIF upload is rejected (bigger than allowed size for zip archive)
SARIF ZIP upload is too large
A fatal error occurred: SARIF file is too large
413: Payload Too Large

あるプロセスが 10 MB の最大サイズを超える SARIF ファイルをアップロードしようとすると、これらのエラーの 1 つが報告されます。 Code scanning では、このサイズより大きいファイルを受け入れません。 code scanning へのアップロード用に生成される結果の数を減らす方法はいくつかあります。

CodeQL またはサードパーティの分析ツールによって生成された SARIF ファイルに対して、このエラーが表示されることがあります。 アップロードの制限について詳しくは、code scanning、「Code scanningの SARIF サポート」を参照してください。

エラーの原因を確認する

非常に大きな SARIF 結果ファイルには、多くの原因が考えられます。

SARIF ファイル圧縮

code scanning によって拒否された結果ファイルを調べて、次の点を確認します。

  • その SARIF ファイルは gzip を使って圧縮された
  • 圧縮ファイルは 10 MB より小さい

ファイルが gzip を使って圧縮されていない場合は、アップロード プロセスを再実行する前にファイルを圧縮してみてください。 圧縮ファイルがまだ大きすぎる場合は、より小さな結果セットを生成するように分析を構成する必要があります。

分析されるコードの量

結果が多すぎる場合は、最も重要なコードのみを分析するように分析を構成する必要があります。

  • インタープリター言語の場合は、リポジトリに多くのテスト、デモ、またはベンダーの依存関係が含まれているかどうかをチェックします。そこではアラートの修正の優先度が低くなります。 このコードを分析から除外してみてください。 詳しくは、「インタープリター言語の分析からコードを除外する」を参照してください。
  • コンパイル型言語の場合は、ビルド プロセスでコードの複数のバリアント (たとえば、複数の運用環境またはアーキテクチャのターゲット) が生成されるかどうかをチェックします。 最初に、コードの 1 つのバリアントのみを分析してみてください。 詳しくは、「ビルド コマンドの最適化」を参照してください。

実行されるクエリの数

それでも結果が多すぎる場合は、コードの分析に使うクエリの数をチェックします。 実行するクエリの数を減らしてみてください。 最初のアラートを修正したら、追加のクエリを再導入できます。 たとえば、CodeQL 分析の場合は、既定のクエリ スイートのみを実行できます。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。

クエリで見つかる結果の数

コードベースに特定のコーディング スタイルがある、または分析で特定のライブラリが理解されていないなどの理由により、1 つのクエリで多くの結果が報告されることがあります。 SARIF ビューアーで結果ファイルをレビューして、結果の分布を確認できます。 たとえば、https://microsoft.github.io/sarif-web-component/ のようにします。

  • 1 つのクエリによって特定されるアラートで結果が占められているかどうかを確認します。 分析からそのクエリを除外してみてください。 他のアラートを修正したときに、それを再導入できます。 CodeQL クエリ構成について詳しくは、「分析からクエリを除外する」を参照してください。
  • 多くの深いパスを持つデータフロー クエリがあるかどうかを確認します。 出力からデータフロー パスを省略してみてください。 CodeQL 分析の構成について詳しくは、「出力からデータフロー パスを省略する」を参照してください。

問題を修正する

以下のオプションは、複雑さの順で記載されています。 結果の数を管理可能なサイズに減らすように、構成を変更する必要があります。 これらのアラートをすべて修正したら、構成を更新して、より多くのコードをカバーしたり、より多くのクエリを実行したりするように分析を拡張できます。

インタープリター言語の分析からコードを除外する

非運用コードを分析から除外することは、結果ファイルのサイズを小さくする簡単な方法です。

ビルド コマンドの最適化

1 つのバリアントのみをコンパイルするビルド コマンドを使うことは、結果ファイルのサイズを小さくする簡単な方法です。

  • CodeQL の code scanning 用の高度な設定: ワークフロー ファイルを更新して、選択したビルド コマンドを指定します。 詳しくは、「コンパイル済み言語の CodeQL コード スキャン」を参照してください。
  • CodeQL CLI database create: database create コマンドを --command オプションを指定して呼び出すか、code scanning 用の YAML 構成ファイルでビルド コマンドを定義し、--codescanning-config オプションを使ってそのファイルを呼び出すことによって、選択したビルド コマンドを指定します。 詳しくは、「CodeQL 分析のためのコードの準備」を参照してください。

実行するクエリ スイートの定義

既に既定のセキュリティ クエリのみを実行しているかもしれませんが、チェックする価値があります。

  • CodeQL の code scanning 用の高度な設定: ワークフロー ファイルで queries キーワードをチェックします。 存在しない場合は、既定のクエリ スイートのみが実行されます。 存在する場合は、それにより実行するクエリが定義されます。 ワークフロー ファイルのこの行をコメントアウトしてみてください。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。
  • CodeQL CLI database analyze: データベース分析コマンドで、クエリ、クエリ スイート、またはクエリ パックを指定するパスをチェックします。 存在しない場合は、既定のクエリ スイートのみが実行されます。 存在する場合は、それらによって実行するクエリが定義されます。それらを呼び出しから削除してみてください。 詳しくは、「CodeQL クエリによるコード分析」を参照してください。

分析からクエリを除外する

1 つのルールに対する結果で結果が占められている場合は、そのルールを分析から除外することが最善の解決策となる場合があります。

または、filter-sarif アクションなどのツールを使って、除外パターンによって特定の検出を除外するように SARIF ファイルを書き換えることもできます。

出力からデータフロー パスを省略する

SARIF 結果で多くの深いコード パスが強調されている場合は、各アラートで報告されるパスの数を減らすことができます。

  • CodeQL の code scanning 用の高度な設定: パスの数を最大 1 または 0 に制限するように 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 設定は、すべてのデータフロー クエリの結果に影響します。

参考資料