Skip to main content

Файл результатов SARIF слишком велик

Невозможно передать файл результатов SARIF размером более 10 МБ в 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

Одна из этих ошибок сообщается, если процесс пытается отправить SARIF-файл, превышающий максимальный размер 10 МБ. Code scanning не принимает файлы выше этого размера. Существует несколько различных способов уменьшить количество результатов, созданных для отправки в code scanning.

Эту ошибку можно увидеть для файлов SARIF, созданных CodeQL или сторонними средствами анализа. Сведения об ограничениях при отправке см. в разделе code scanning, см. в разделе "Поддержка SARIF для проверки кода".

Подтверждение причины ошибки

Существует множество потенциальных причин очень больших файлов результатов SARIF.

Сжатие файлов SARIF

Просмотрите файл результатов, отклоненный code scanning, чтобы узнать, следует ли:

  • ФАЙЛ SARIF был сжат с помощью gzip
  • Сжатый файл меньше 10 МБ

Если файл не был сжатым с помощью gzip, попробуйте сжать файл, прежде чем повторно запустить процесс отправки. Если сжатый файл по-прежнему слишком велик, необходимо настроить анализ для создания меньшего набора результатов.

Объем проанализированного кода

Если у вас слишком много результатов, необходимо настроить анализ для анализа только самого важного кода.

  • Для интерпретированных языков проверьте, содержит ли репозиторий множество тестов, демонстраций или зависимостей, в которых исправление оповещений является более низким приоритетом. Попробуйте исключить этот код из анализа. Дополнительные сведения см. в разделе "Исключение кода из анализа для интерпретированных языков".
  • Для скомпилированных языков проверьте, создает ли процесс сборки несколько вариантов кода (например, целевые объекты для нескольких операционных сред или архитектур). Сначала попробуйте проанализировать только один вариант кода. Дополнительные сведения см. в разделе "Оптимизация команды сборки".

Количество выполняемых запросов

Если у вас по-прежнему слишком много результатов, проверьте, сколько запросов используется для анализа кода. Попробуйте выполнить меньше запросов. При исправлении исходных оповещений можно повторно вводить дополнительные запросы. Например, для анализа CodeQL можно выполнить только набор запросов по умолчанию. Дополнительные сведения см. в разделе «Настройка расширенной настройки для сканирования кода».

Количество результатов, найденных запросами

Иногда один запрос сообщает много результатов, так как база кода имеет определенный стиль написания кода или поскольку анализ не понимает определенную библиотеку. Вы можете просмотреть файл результатов в средстве просмотра SARIF, чтобы просмотреть распределение результатов. Например, https://microsoft.github.io/sarif-web-component/.

  • Проверьте, доминируют ли результаты оповещения, определяемые одним запросом. Попробуйте исключить этот запрос из анализа. При исправлении других оповещений его можно повторно включить. Дополнительные сведения о конфигурации запроса CodeQL см. в разделе "Исключение запроса из анализа".
  • Проверьте наличие запросов потока данных с большим количеством глубоких путей. Попробуйте исключить пути потока данных из выходных данных. Дополнительные сведения о конфигурации анализа CodeQL см. в разделе "Опущение путей потока данных из выходных данных".

Устранение проблемы

Следующие параметры перечислены в порядке сложности. Необходимо изменить конфигурацию, чтобы уменьшить количество результатов до управляемого размера. После исправления всех этих оповещений можно обновить конфигурацию, чтобы развернуть анализ, чтобы покрыть больше кода или выполнить дополнительные запросы.

Исключение кода из анализа для интерпретированных языков

Исключение непроизводственных кода из анализа — это простой способ уменьшить размер файла результатов.

  • Расширенная настройка CodeQL для code scanning: используйте paths и paths-ignore в файле рабочего процесса, чтобы указать код для анализа. Дополнительные сведения см. в разделе «Настройка расширенной настройки для сканирования кода».
  • CodeQL CLI database create— создайте файл конфигурации YAML для сканирования кода с помощью того же синтаксиса, чтобы определить, какой код необходимо проанализировать. database create Обновите команду, чтобы вызвать этот файл конфигурации с помощью --codescanning-config параметра. Дополнительные сведения см. в разделе «Настройка расширенной настройки для сканирования кода».

Оптимизация команды сборки

Использование команды сборки, которая компилирует только один вариант, — это простой способ уменьшить размер файла результатов.

  • Расширенная настройка CodeQL для code scanning: обновите файл рабочего процесса, чтобы указать выбранную команду сборки. Дополнительные сведения см. в разделе «Сканирование кода CodeQL для скомпилированных языков».
  • CodeQL CLI database create— укажите выбранную команду сборки, вызвав database create команду с --command параметром или определив команду сборки в файле конфигурации YAML для сканирования кода и вызова файла с помощью --codescanning-config параметра. Дополнительные сведения см. в разделе «Подготовка кода для анализа CodeQL».

Определение набора запросов для запуска

Возможно, вы уже выполняете только запросы безопасности по умолчанию, но стоит проверить.

  • Расширенная настройка CodeQL для code scanning: проверьте файл рабочего процесса для ключевого queries слова. Если он отсутствует, запускается только набор запросов по умолчанию. Если он присутствует, он определяет, какие запросы следует выполнять. Попробуйте закомментировать эту строку файла рабочего процесса. Дополнительные сведения см. в разделе «Настройка расширенной настройки для сканирования кода».
  • CodeQL CLI database analyze— проверьте команду анализа базы данных для любых путей, указывающих запросы, наборы запросов или пакеты запросов. Если нет, выполняется только набор запросов по умолчанию. Если они присутствуют, они определяют, какие запросы для выполнения, можно попытаться удалить их из вызова. Дополнительные сведения см. в разделе «Анализ кода с помощью запросов CodeQL».

Исключение запроса из анализа

Если результаты доминируют в результатах для одного правила, исключение правила из анализа может быть лучшим решением.

Кроме того, можно использовать средство, например действие filter-sarif , для перезаписи ФАЙЛА SARIF, чтобы исключить определенные обнаружения с помощью шаблона исключения.

Опущение путей потока данных из выходных данных

Если в результатах SARIF выделено много путей глубокого кода, можно уменьшить количество путей, сообщаемых для каждого оповещения.

  • Расширенная настройка CodeQL для code scanning: обновите analyze шаг, чтобы ограничить количество путей не более одного или нуля.

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze
      env: 
        CODEQL_ACTION_EXTRA_OPTIONS: '{"database":{"interpret-results":["--max-paths", 1]}}'
    
  • CodeQL CLI database analyze: обновите команду анализа базы данных, чтобы включить --max-paths=1 флаг. Дополнительные сведения см. в разделе «анализ базы данных».

Note

Параметр max-paths влияет на результаты всех запросов потока данных.

Дополнительные материалы