Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Выходные данные ИНТЕРФЕЙСА командной строки CodeQL SARIF

Вы можете вывести SARIF из CodeQL CLI и поделиться результатами статического анализа с другими системами.

GitHub CodeQL лицензируется на уровне пользователя после установки. CodeQL можно использовать только для определенных задач в соответствии с лицензионными ограничениями. Дополнительные сведения см. в разделе Сведения о CodeQL CLI.

Если у вас есть учетная запись GitHub Enterprise и лицензия на GitHub Advanced Security, вы можете использовать CodeQL для автоматического анализа, непрерывной интеграции и непрерывной поставки. Вы можете создать корпоративную учетную запись, обратившись в отдел продаж. Дополнительные сведения см. в разделе Сведения о GitHub Advanced Security.

Примечание: Эта статья была перенесена с веб-сайта документации CodeQL в январе 2023 г.

Сведения о выходных данных SARIF

SARIF предназначен для представления выходных данных широкого спектра средств статического анализа, и в спецификации SARIF есть много функций, которые считаются "необязательными". В этом документе подробно описаны выходные данные, полученные при использовании типа sarifv2.1.0формата , который соответствует спецификации SARIF версии 2.1.0.csd1. Дополнительные сведения о выборе формата файла для результатов анализа см. в разделе Команда анализа базы данных в документации по CodeQL.

Спецификация и схема SARIF

Эта статья предназначена для ознакомления с подробной спецификацией SARIF. Дополнительные сведения о спецификации и схеме SARIF см. в документации по спецификации SARIF.

Заметки об изменениях

Изменения между версиями

Версия CodeQLТип форматаИзменения
2.0.0sarifv2.1.0Первая версия этого формата.

Будущие изменения выходных данных

Выходные данные определенного типа формата (например, sarifv2.1.0) могут измениться в будущих выпусках CodeQL. Мы будем стремиться поддерживать обратную совместимость с потребителями созданного SARIF, обеспечивая следующее:

  • Поля, помеченные как всегда создаваемые, никогда не будут удалены.

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

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

Новые типы аргументов формата могут быть добавлены в будущих версиях CodeQL, например, для поддержки новых версий SARIF. Они не гарантируют обратную совместимость, если они не задокументированы явным образом.

Созданные объекты SARIF

Здесь подробно описан каждый компонент SARIF, который может быть создан, а также любые конкретные обстоятельства. Мы опускаем все свойства, которые никогда не создаются.

Объект sarifLog.

Имя свойства JSONВсегда сгенерировано?Примечания
$schemaПредоставляет ссылку на схему SARIF.
versionВерсия SARIF, используемая для создания выходных данных.
runsМассив, содержащий один объект выполнения для одного языка.

Объект run.

Имя свойства JSONВсегда сгенерировано?Примечания
toolНет
originalUriBaseIdsСловарь uriBaseIds для artifactLocations, представляющий исходные расположения на компьютере для анализа. Как минимум, он будет содержать %SRCROOT% uriBaseId, который представляет корневое расположение на компьютере анализа исходного кода для проанализированного проекта. Каждый из них artifactLocation будет содержать uri свойства и description .
artifactsМассив, содержащий по крайней мере один объект артефакта для каждого файла, на который ссылается результат.
resultsНет
newLineSequencesНет
columnKindНет
propertiesСловарь свойств будет содержать semmle.formatSpecifier, который идентифицирует спецификатор формата, переданный в CodeQL CLI.

Объект tool.

Имя свойства JSONВсегда сгенерировано?Примечания
driverНет

Объект toolComponent.

Имя свойства JSONВсегда сгенерировано?Примечания
nameЗадайте для параметра CodeQL цепочку инструментов командной строки для выходных данных из средств CodeQL CLI. Обратите внимание, что если выходные данные были созданы с помощью другого средства, сообщается о другом name , а формат может отличаться от описанного здесь.
organizationЗадайте для параметра значение "GitHub".
versionЗадайте версию выпуска CodeQL, например 2.0.0.
rulesМассив объектов reportingDescriptor, представляющих правила. Этот массив будет содержать, как минимум, все правила, которые были выполнены во время этого анализа, но может содержать правила, которые были доступны, но не были выполнены. Дополнительные сведения о включении запросов см. в разделе defaultConfiguration.

reportingDescriptor object (для правила)

reportingDescriptor Объекты могут использоваться в нескольких местах в спецификации SARIF. Если объект reportingDescriptor включен в массив toolComponent правил объекта , он имеет следующие свойства.

Имя свойства JSONВсегда сгенерировано?Примечания
idБудет содержать свойство, указанное @id в запросе, которое определяет правило, которое обычно имеет формат language/rule-name (например cpp/unsafe-format-string, ). Если ваша организация определяет @opaqueid свойство в запросе, оно будет использоваться вместо него.
nameБудет содержать свойство, @id указанное в запросе. Пример см. в свойстве id выше.
shortDescriptionБудет содержать свойство, @name указанное в запросе, определяющем правило.
fullDescriptionБудет содержать свойство, @description указанное в запросе, определяющем правило.
defaultConfigurationОбъект reportingConfiguration с включенным свойством true или false и свойством уровня, заданным в соответствии со @severity свойством, указанным в запросе, который определяет правило. Опущен, если @severity свойство не указано.

Объект artifact.

Имя свойства JSONВсегда создается?Примечания
locationОбъект artifactLocation.
indexИндекс объекта artifact.
contentsЕсли результаты создаются с помощью флага --sarif-add-file-contents , а исходный код доступен во время создания файла SARIF, то contents свойство заполняется объектом с набором artifactContent text свойств.

Объект artifactLocation.

Имя свойства JSONВсегда создается?Примечания
uriНет
indexНет
uriBaseIdЕсли файл относится к известному абстрактному расположению, например корневому исходному расположению на компьютере для анализа, он будет задан.

Объект result.

Состав результатов зависит от параметров, предоставляемых CodeQL. По умолчанию результаты группируются по строке уникального формата сообщения и основному расположению. Таким образом, два результата, которые возникают в одном расположении с одинаковым базовым сообщением, будут отображаться в виде одного результата в выходных данных. Это поведение можно отключить с помощью флага --ungroup-results, в этом случае результаты не группируются.

Имя свойства JSONВсегда создается?Примечания
ruleIdСм. описание свойства в reportingDescriptor объекте id (для правила).
ruleIndexНет
messageСообщение, описывающее проблемы, возникающие в этом расположении. Это сообщение может быть сообщением SARIF "Сообщение с заполнителем", содержащим ссылки, ссылающиеся на расположения в свойстве relatedLocations .
locationsМассив, содержащий один location объект.
partialFingerprintsСловарь от именованных типов отпечатков до отпечатка. Он будет содержать как минимум значение для primaryLocationLineHash, которое предоставляет отпечаток на основе контекста основного расположения.
codeFlowsЭтот массив может быть заполнен одним или несколькими codeFlow объектами, если запрос, определяющий правило для этого результата, имеет значение @kind path-problem.
relatedLocationsЭтот массив будет заполнен, если запрос, определяющий правило для этого результата, содержит сообщение с параметрами заполнителей. Каждое уникальное расположение включается один раз.
suppressionsЕсли результат подавляется, он будет содержать один suppression объект со свойством @kind , равным IN_SOURCE. Если этот результат не подавляется, но есть по крайней мере один результат с подавлением, для него будет задан пустой массив, в противном случае он не будет задан.

Объект location.

Имя свойства JSONВсегда создается?Примечания
physicalLocationНет
idlocation Объекты, которые отображаются в массиве relatedLocations result объекта , могут содержать id свойство .
messagelocation Объекты могут содержать свойство , message если:

— Они отображаются в массиве relatedLocations result объекта , могут содержать message свойство .

— Они отображаются в свойстве threadFlowLocation.location .

Объект physicalLocation.

Имя свойства JSONВсегда создается?Примечания
artifactLocationНет
regionЕсли данный physicalLocation объект существует в текстовом файле, например в файле исходного region кода, свойство может присутствовать.
contextRegionМожет присутствовать, если это расположение имеет связанный объект snippet.

Объект region.

Существует два типа объектов, создаваемых region CodeQL:

  • Области смещения строк и столбцов

  • Области смещения и длины символов

Любой регион, созданный CodeQL, можно указать в любом формате, и потребители должны надежно обрабатывать любой тип.

Для областей смещения строк или столбцов будут заданы следующие свойства:

Имя свойства JSONВсегда создается?Примечания
startLineНет
startColumnНе включается, если равно значению по умолчанию 1.
endLineНе включается, если он идентичен .startLine
endColumnНет
snippetНет

Для областей смещения символов и длины будут заданы следующие свойства:

Имя свойства JSONВсегда создается?Примечания
charOffsetПредоставляется, если startLine, startColumn, endLineи endColumn не заполнены.
charLengthПредоставляется, если startLine, startColumn, endLineи endColumn не заполнены.
snippetНет

Объект codeFlow.

Имя свойства JSONВсегда создается?Примечания
threadFlowsНет

Объект threadFlow.

Имя свойства JSONВсегда создается?Примечания
locationsНет

Объект threadFlowLocation.

Имя свойства JSONВсегда создается?Примечания
locationНет