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 можно выполнить только набор запросов по умолчанию. Дополнительные сведения см. в разделе Настройка advanced setup for code scanning.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Расширенная настройка CodeQL для code scanning: используйте query-filters ключевое слово для исключения одного или нескольких запросов из анализа. Дополнительные сведения см. в разделе Настройка advanced setup for code scanning.
  • 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 флаг. Дополнительные сведения см. в разделе анализ базы данных.

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

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