Сведения о выходных данных SARIF
SARIF предназначен для представления выходных данных широкого спектра статических средств анализа, и существует множество функций в спецификации SARIF, которые считаются "необязательными". В этом документе подробно описаны выходные данные, созданные при использовании типа sarifv2.1.0формата, соответствующего спецификации SARIF версии 2.1.0.csd1. Дополнительные сведения о выборе формата файла для результатов анализа см. в разделе анализ базы данных.
Спецификация и схема SARIF
Эта статья предназначена для чтения вместе с подробной спецификацией SARIF. Дополнительные сведения о спецификации и схеме SARIF см. в документации по спецификации SARIF.
Сведения об изменениях
Изменения между версиями
| CodeQL версия | Тип формата | Changes |
|---|---|---|
| 2.0.0 | sarifv2.1.0 | Первая версия этого формата. |
Будущие изменения выходных данных
Выход, создаваемый для определённого типа формата (например, sarifv2.1.0) может меняться в будущих CodeQL релизах. Мы будем стремиться обеспечить обратную совместимость с потребителями созданного SARIF, гарантируя следующее:
-
Поля, помеченные как всегда создаваемые, никогда не будут удалены.
-
Для полей, помеченных как не всегда создаваемые, обстоятельства, при которых создаются поля, могут измениться. Потребители CodeQL продукции SARIF должны быть устойчивы к наличию или отсутствию этих полей.
Новые выходные поля могут быть добавлены в будущих выпусках в том же типе формата. Они не считаются разрывом обратной совместимости, и потребители должны быть надежными в присутствии новых добавленных полей.
В будущих версиях CodeQLмогут быть добавлены новые типы аргументов формата — например, для поддержки новых версий SARIF. Они не гарантируют обратную совместимость, если только явно не описаны.
Созданные объекты SARIF
Эти сведения содержат сведения о каждом компоненте SARIF, который может быть создан вместе с любыми конкретными обстоятельствами. Мы опустим все свойства, которые никогда не создаются.
объект sarifLog
объект run
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
tool | None | |
artifacts | Массив, содержащий по крайней мере один объект артефакта для каждого файла, на который ссылается результат. | |
results | None | |
newLineSequences | None | |
columnKind | None | |
properties | Словарь свойств будет содержать semmle.formatSpecifier, который определяет спецификатор формата, переданный в CodeQL CLI. |
объект tool
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
driver | None |
объект 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 свойство, указанное в запросе, определяющее правило. | |
defaultConfiguration | ||
reportingConfiguration Объект с включенным свойством, равным true или false, и свойством @severity уровня, заданным в запросе, определяющим правило. Опущен, если @severity свойство не указано. |
объект artifact
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
___location | Объект artifactLocation . | |
index | Индекс объекта artifact. | |
contents | Если результаты создаются с помощью --sarif-add-file-contents флага, и исходный код доступен во время создания ФАЙЛА SARIF, contents свойство заполняется artifactContent объектом с набором text свойств. |
объект artifactLocation
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
uri | None | |
index | None | |
uriBaseId | Если файл относится к известному абстрактному расположению, например корневому исходному расположению на компьютере анализа, это будет установлено. |
объект result
Состав результатов зависит от вариантов, предоставленных .CodeQL По умолчанию результаты группируются по уникальной строке формата сообщений и основному расположению. Таким образом, два результата, происходящие в одном расположении с одинаковым базовым сообщением, будут отображаться в виде одного результата в выходных данных. Это поведение можно отключить с помощью флага --ungroup-results, в котором результаты не группируются.
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
ruleId | См. описание id свойства в reportingDescriptor объекте (для правила). | |
ruleIndex | None | |
message | Сообщение, описывающее проблемы, возникающие в этом расположении. Это сообщение может быть SARIF "Сообщение с заполнителем", содержащее ссылки, ссылающиеся на расположения в свойстве relatedLocations . | |
locations | Массив, содержащий один ___location объект. | |
partialFingerprints | Словарь от именованных типов отпечатков до отпечатка. Он будет содержать как минимум значение для primaryLocationLineHash, которое предоставляет отпечаток на основе контекста основного расположения. | |
codeFlows | Этот массив может быть заполнен одним или несколькими codeFlow объектами, если запрос, определяющий правило для этого результата @kind path-problem. | |
relatedLocations | Этот массив будет заполнен, если запрос, определяющий правило для этого результата, содержит сообщение с параметрами заполнителя. Каждое уникальное расположение включается один раз. | |
suppressions | Если результат подавляется, он будет содержать один suppression объект, для @kind свойства задано значение IN_SOURCE. Если этот результат не подавляется, но есть хотя бы один результат, имеющий подавление, то этот результат будет установлен на пустой массив, в противном случае он не будет задан. |
объект ___location
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
physicalLocation | None | |
id | ||
___location Объекты, отображаемые relatedLocations в массиве result объекта, могут содержать id свойство. | ||
message | ||
___location Объекты могут содержать свойство, message если:— Они отображаются в relatedLocations массиве result объекта, может содержать message свойство.— они отображаются в свойстве threadFlowLocation.___location . |
объект physicalLocation
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
artifactLocation | None | |
region | Если данный physicalLocation объект существует в текстовом файле, например в файле исходного кода, region то это свойство может присутствовать. | |
contextRegion | Может присутствовать, если это расположение имеет связанное snippet. |
объект region
Существует два типа объектов, производящихся region в:CodeQL
-
Области смещения строк и столбцов
-
Области смещения символов и длины
Любой регион, производимый CodeQL , может быть указан в любом из этих форматов, и потребители должны надёжно работать с любым из этих типов.
Для регионов смещения строк и столбцов будут заданы следующие свойства:
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
startLine | None | |
startColumn | Не включен, если равно значению по умолчанию 1. | |
endLine | Не включен, если идентичен startLine. | |
endColumn | None | |
snippet | None |
Для областей смещения символов и длины будут заданы следующие свойства:
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
charOffset | Указано, если startLine``startColumn, endLineи endColumn не заполняются. | |
charLength | Указано, если startLine``startColumn, endLineи endColumn не заполняются. | |
snippet | None |
объект codeFlow
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
threadFlows | None |
объект threadFlow
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
locations | None |
объект threadFlowLocation
| Имя свойства JSON | Всегда создается? | Примечания. |
|---|---|---|
___location | None |