Skip to main content

Выходные данные CODEQL CLI SARIF

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

Кто может использовать эту функцию?

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

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

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

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

Спецификация и схема 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нет
artifactsМассив, содержащий по крайней мере один объект артефакта для каждого файла, на который ссылается результат.
resultsнет
newLineSequencesнет
columnKindнет
propertiesСловарь свойств будет содержать semmle.formatSpecifierописатель формата, передаваемый в CodeQL CLI.

Объект tool.

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

Объект toolComponent.

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

reportingDescriptor объект (для правила)

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

Имя свойства JSONВсегда создается?Примечания.
idБудет содержать @id свойство, указанное в запросе, определяющее правило, которое обычно является форматом language/rule-name (например cpp/unsafe-format-string). Если ваша организация определяет @opaqueid свойство в запросе, оно будет использоваться.
nameБудет содержать свойство, указанное @id в запросе. Пример см. в приведенном id выше свойстве.
shortDescriptionБудет содержать @name свойство, указанное в запросе, определяющее правило.
fullDescriptionБудет содержать @description свойство, указанное в запросе, определяющее правило.
defaultConfigurationreportingConfiguration Объект с включенным свойством, равным 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См. описание id свойства в reportingDescriptor объекте (для правила).
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Нет