このエラーについて
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 分析の構成について詳しくは、「出力からデータフロー パスを省略する」を参照してください。
問題を修正する
以下のオプションは、複雑さの順で記載されています。 結果の数を管理可能なサイズに減らすように、構成を変更する必要があります。 これらのアラートをすべて修正したら、構成を更新して、より多くのコードをカバーしたり、より多くのクエリを実行したりするように分析を拡張できます。
インタープリター言語の分析からコードを除外する
非運用コードを分析から除外することは、結果ファイルのサイズを小さくする簡単な方法です。
- CodeQL の code scanning 用の高度な設定: ワークフロー ファイルで
paths
とpaths-ignore
を使って、分析するコードを指定します。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。 - CodeQL CLI
database create
: 同じ構文を使って code scanning 用の YAML 構成ファイルを作成し、分析するコードを定義します。database create
コマンドを更新し、--codescanning-config
オプションを使ってこの構成ファイルを呼び出すようにします。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。
ビルド コマンドの最適化
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 つのルールに対する結果で結果が占められている場合は、そのルールを分析から除外することが最善の解決策となる場合があります。
- CodeQL の code scanning 用の高度な設定:
query-filters
キーワードを使って、分析から 1 つ以上のクエリを除外します。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。 - CodeQL CLI
database analyze
: データベース分析コマンドを更新して、分析から 1 つ以上のクエリを除外します。 詳しくは、「CodeQL クエリによるコード分析」を参照してください。
または、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
設定は、すべてのデータフロー クエリの結果に影響します。